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 2020/01/22 00:52:41 UTC

[servicecomb-java-chassis] branch master updated (a3b2a80 -> d294674)

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/servicecomb-java-chassis.git.


    from a3b2a80  [SCB-1713]Invocation carries both invocation arguments and swagger arguments and fix implicit parameter problems
     new ef972eb  [SCB-1726]fix all TODOs in demos
     new 704386e  [SCB-1726]fix all TODOs in demos
     new a75b404  [SCB-1726]mute execution logs
     new a5c91e6  [SCB-1725]turn on integration tests of highway and fix known problem
     new d294674  [SCB-1725]mute some logs to make travis CI happy

The 5 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:
 .../src/main/resources/archetype-resources/pom.xml |   4 +
 .../src/main/resources/archetype-resources/pom.xml |   4 +
 .../src/main/resources/archetype-resources/pom.xml |   4 +
 .../protobuf/definition/OperationProtobuf.java     |  15 +-
 .../protobuf/definition/RequestRootSerializer.java |   8 +-
 .../converter/SwaggerToProtoGenerator.java         |  26 ++-
 .../converter/TestSwaggerToProtoGenerator.java     |  11 +
 .../protobuf/utils/TestProtobufSchemaUtils.java    | 145 -------------
 .../org/apache/servicecomb/core/SCBEngine.java     |   2 +-
 .../core/definition/OperationConfig.java           |   2 +-
 coverage-reports/pom.xml                           |   4 +
 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}    |   8 +-
 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 +
 demo/perf/pom.xml                                  |   4 +
 .../common/utils/LambdaMetafactoryUtils.java       |  47 +----
 .../foundation/common/utils/bean/BoolGetter.java   |  21 --
 .../foundation/common/utils/bean/BoolSetter.java   |  21 --
 .../foundation/common/utils/bean/ByteGetter.java   |  21 --
 .../foundation/common/utils/bean/ByteSetter.java   |  21 --
 .../foundation/common/utils/bean/DoubleGetter.java |  21 --
 .../foundation/common/utils/bean/DoubleSetter.java |  21 --
 .../foundation/common/utils/bean/FloatGetter.java  |  21 --
 .../foundation/common/utils/bean/FloatSetter.java  |  21 --
 .../foundation/common/utils/bean/IntGetter.java    |  21 --
 .../foundation/common/utils/bean/IntSetter.java    |  21 --
 .../foundation/common/utils/bean/LongGetter.java   |  21 --
 .../foundation/common/utils/bean/LongSetter.java   |  21 --
 .../foundation/common/utils/bean/ShortGetter.java  |  21 --
 .../foundation/common/utils/bean/ShortSetter.java  |  21 --
 .../common/utils/TestLambdaMetafactoryUtils.java   |   6 +-
 .../common/utils/TestLambdaPerformance.java        |   3 +-
 .../config/priority/PriorityProperty.java          |   2 +-
 .../foundation/protobuf/ProtoMapper.java           |   3 +
 .../scalar/AbstractScalarReadSchemas.java          |   6 +-
 .../deserializer/scalar/BoolReadSchemas.java       |   3 +-
 .../deserializer/scalar/DoubleReadSchemas.java     |   3 +-
 .../deserializer/scalar/EnumsReadSchemas.java      |   3 +-
 .../deserializer/scalar/FloatReadSchemas.java      |   3 +-
 .../serializer/repeated/RepeatedWriteSchemas.java  |  41 +---
 .../schema/serializer/scalar/BoolWriteSchemas.java |  13 +-
 .../serializer/scalar/BytesWriteSchemas.java       |   8 +-
 .../serializer/scalar/DoubleWriteSchemas.java      |  13 +-
 .../schema/serializer/scalar/EnumWriteSchemas.java |  14 +-
 .../serializer/scalar/Fixed32WriteSchemas.java     |  11 +-
 .../serializer/scalar/Fixed64WriteSchemas.java     |  11 +-
 .../serializer/scalar/FloatWriteSchemas.java       |  11 +-
 .../serializer/scalar/Int32WriteSchemas.java       |  14 +-
 .../serializer/scalar/Int64WriteSchemas.java       |  11 +-
 .../serializer/scalar/SFixed32WriteSchemas.java    |  11 +-
 .../serializer/scalar/SFixed64WriteSchemas.java    |  11 +-
 .../serializer/scalar/SInt32WriteSchemas.java      |  11 +-
 .../serializer/scalar/SInt64WriteSchemas.java      |  11 +-
 .../serializer/scalar/StringWriteSchemas.java      |  10 +-
 .../serializer/scalar/UInt32WriteSchemas.java      |  11 +-
 .../serializer/scalar/UInt64WriteSchemas.java      |  11 +-
 .../internal/bean/TestBeanDescriptorManager.java   |  10 +-
 .../schema/objectparams/FlattenObjectRequest.java  | 216 ++++++++++----------
 .../schema/objectparams/FlattenObjectResponse.java | 216 ++++++++++----------
 .../schema/objectparams/RecursiveObjectParam.java  |   2 +-
 .../it-common/src/main/resources/logback.xml       |   2 +-
 .../org/apache/servicecomb/it/ConsumerMain.java    |   2 +-
 .../apache/servicecomb/it/junit/ITJUnitUtils.java  |   3 +-
 .../testcase/TestDefaultJsonValueJaxrsSchema.java  |   3 +-
 .../servicecomb/it/testcase/TestParamCodec.java    |  29 +--
 .../it/testcase/TestParamCodecEdge.java            |  11 +-
 .../objectparams/TestJAXRSObjectParamType.java     |  33 +--
 .../objectparams/TestRPCObjectParamType.java       |  30 +--
 .../objectparams/TestSpringMVCObjectParamType.java |  95 ++++-----
 .../it-edge/src/main/resources/microservice.yaml   |  11 +
 .../servicecomb/it/schema/ParamCodecSchema.java    |  10 -
 .../it/schema/ParamCodecSchemaRestOnly.java}       |  25 ++-
 .../servicecomb/it/schema/generic/MyEndpoint.java  |   2 +-
 .../it/schema/generic/MyEndpointWithInterface.java |   4 +-
 .../demo/pojo/test/endpoints/SmartCareImpl.java    |   2 -
 integration-tests/pom.xml                          |   4 +
 .../src/test}/resources/logback.xml                |   2 +-
 .../src/test/resources/config/log4j.z.properties   |   4 +-
 .../src/test}/resources/logback.xml                |   2 +-
 java-chassis-distribution/pom.xml                  |   4 +
 .../apache/servicecomb/provider/pojo/Invoker.java  |   1 -
 .../common/InvocationToHttpServletRequest.java     |  13 +-
 .../common/TestInvocationToHttpServletRequest.java |   4 +-
 solutions/solution-basic/pom.xml                   |   4 +
 .../transport/highway/HighwayCodec.java            |   4 +-
 .../services/org.apache.servicecomb.core.Transport |   1 -
 .../transport/highway/TestHighwayClient.java       |  34 ----
 .../transport/highway/TestHighwayCodec.java        | 115 +++--------
 105 files changed, 1008 insertions(+), 1414 deletions(-)
 delete mode 100644 common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/utils/TestProtobufSchemaUtils.java
 copy demo/{demo-springmvc/springmvc-client/src/test/java/org/apache/servicecomb/demo/springmvc/SpringMvcIT.java => demo-jaxrs/jaxrs-client/src/test/java/org/apache/servicecomb/demo/jaxrs/JaxrsIT.java} (86%)
 delete mode 100644 foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/BoolGetter.java
 delete mode 100644 foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/BoolSetter.java
 delete mode 100644 foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/ByteGetter.java
 delete mode 100644 foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/ByteSetter.java
 delete mode 100644 foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/DoubleGetter.java
 delete mode 100644 foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/DoubleSetter.java
 delete mode 100644 foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/FloatGetter.java
 delete mode 100644 foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/FloatSetter.java
 delete mode 100644 foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/IntGetter.java
 delete mode 100644 foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/IntSetter.java
 delete mode 100644 foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/LongGetter.java
 delete mode 100644 foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/LongSetter.java
 delete mode 100644 foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/ShortGetter.java
 delete mode 100644 foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/ShortSetter.java
 copy integration-tests/{it-consumer/src/main/java/org/apache/servicecomb/it/schema/IgnoreMethodJaxrsSchema.java => it-producer/src/main/java/org/apache/servicecomb/it/schema/ParamCodecSchemaRestOnly.java} (66%)
 copy integration-tests/{it-common/src/main => springmvc-tests/springmvc-tests-general-with-springboot/src/test}/resources/logback.xml (97%)
 copy integration-tests/{it-common/src/main => springmvc-tests/springmvc-tests-simplified-mapping-with-springboot/src/test}/resources/logback.xml (97%)


[servicecomb-java-chassis] 03/05: [SCB-1726]mute execution logs

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/servicecomb-java-chassis.git

commit a75b404cd1703dbd96377a06b7e98e3393416b13
Author: liubao <bi...@qq.com>
AuthorDate: Mon Jan 20 09:48:41 2020 +0800

    [SCB-1726]mute execution logs
---
 integration-tests/it-common/src/main/resources/logback.xml              | 2 +-
 .../src/main/java/org/apache/servicecomb/provider/pojo/Invoker.java     | 1 -
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/integration-tests/it-common/src/main/resources/logback.xml b/integration-tests/it-common/src/main/resources/logback.xml
index 02f8f13..897ed2e 100644
--- a/integration-tests/it-common/src/main/resources/logback.xml
+++ b/integration-tests/it-common/src/main/resources/logback.xml
@@ -25,7 +25,7 @@
   </appender>
   <logger name="org.apache.servicecomb.common.javassist.JavassistUtils" level="WARN"/>
   <logger name="org.apache.servicecomb.core.definition.schema.ProducerSchemaFactory" level="WARN"/>
-  <root level="INFO">
+  <root level="WARN">
     <appender-ref ref="STDOUT"/>
   </root>
 </configuration>
\ No newline at end of file
diff --git a/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/Invoker.java b/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/Invoker.java
index 2166280..89cf49d 100644
--- a/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/Invoker.java
+++ b/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/Invoker.java
@@ -181,7 +181,6 @@ public class Invoker implements InvocationHandler {
 
   public Map<String, Object> toArguments(Method method, Object[] args) {
     Map<String, Object> arguments = new HashMap<>();
-    // TODO: WEAK parameter name maybe override by annotations.
     for (int i = 0; i < method.getParameterCount(); i++) {
       arguments.put(method.getParameters()[i].getName(), args[i]);
     }


[servicecomb-java-chassis] 05/05: [SCB-1725]mute some logs to make travis CI happy

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/servicecomb-java-chassis.git

commit d294674c3634915c85e718ed19f483834cf4bab8
Author: liubao <bi...@qq.com>
AuthorDate: Tue Jan 21 15:49:40 2020 +0800

    [SCB-1725]mute some logs to make travis CI happy
---
 .../org/apache/servicecomb/core/SCBEngine.java     |  2 +-
 .../config/priority/PriorityProperty.java          |  2 +-
 .../src/test/resources/logback.xml                 | 31 ++++++++++++++++++++++
 .../src/test/resources/config/log4j.z.properties   |  4 +--
 .../src/test/resources/logback.xml                 | 31 ++++++++++++++++++++++
 5 files changed, 66 insertions(+), 4 deletions(-)

diff --git a/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java b/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java
index 69b5fc6..674f9b1 100644
--- a/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java
+++ b/core/src/main/java/org/apache/servicecomb/core/SCBEngine.java
@@ -287,7 +287,7 @@ public class SCBEngine {
           status = SCBStatus.UP;
           triggerEvent(EventType.AFTER_REGISTRY);
           EventManager.unregister(this);
-          LOGGER.info("ServiceComb is ready.");
+          LOGGER.warn("ServiceComb is ready.");
         }
       }
     });
diff --git a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/priority/PriorityProperty.java b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/priority/PriorityProperty.java
index e7fc6a4..53cc9cc 100644
--- a/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/priority/PriorityProperty.java
+++ b/foundations/foundation-config/src/main/java/org/apache/servicecomb/config/priority/PriorityProperty.java
@@ -167,7 +167,7 @@ public class PriorityProperty<T> {
       LOGGER.debug("config inited, \"{}\" set to {}, effective key is \"{}\".",
           joinedPriorityKeys, value, effectiveKey);
     } else {
-      LOGGER.info("config changed, \"{}\" changed from {} to {}, effective key is \"{}\".",
+      LOGGER.debug("config changed, \"{}\" changed from {} to {}, effective key is \"{}\".",
           joinedPriorityKeys, finalValue, value, effectiveKey);
     }
     finalValue = value;
diff --git a/integration-tests/springmvc-tests/springmvc-tests-general-with-springboot/src/test/resources/logback.xml b/integration-tests/springmvc-tests/springmvc-tests-general-with-springboot/src/test/resources/logback.xml
new file mode 100644
index 0000000..897ed2e
--- /dev/null
+++ b/integration-tests/springmvc-tests/springmvc-tests-general-with-springboot/src/test/resources/logback.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<configuration scan="true">
+  <jmxConfigurator/>
+  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+    <encoder>
+      <pattern>%d [%level] [%thread][%marker] - %msg (%F:%L\)%n</pattern>
+    </encoder>
+  </appender>
+  <logger name="org.apache.servicecomb.common.javassist.JavassistUtils" level="WARN"/>
+  <logger name="org.apache.servicecomb.core.definition.schema.ProducerSchemaFactory" level="WARN"/>
+  <root level="WARN">
+    <appender-ref ref="STDOUT"/>
+  </root>
+</configuration>
\ No newline at end of file
diff --git a/integration-tests/springmvc-tests/springmvc-tests-general/src/test/resources/config/log4j.z.properties b/integration-tests/springmvc-tests/springmvc-tests-general/src/test/resources/config/log4j.z.properties
index 8541241..02401e6 100644
--- a/integration-tests/springmvc-tests/springmvc-tests-general/src/test/resources/config/log4j.z.properties
+++ b/integration-tests/springmvc-tests/springmvc-tests-general/src/test/resources/config/log4j.z.properties
@@ -14,8 +14,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-log4j.logger.runLogger=INFO
-log4j.rootLogger=INFO,paas,stdout
+log4j.logger.runLogger=WARN
+log4j.rootLogger=WARN,paas,stdout
 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
 log4j.appender.stdout.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} - %m%n
diff --git a/integration-tests/springmvc-tests/springmvc-tests-simplified-mapping-with-springboot/src/test/resources/logback.xml b/integration-tests/springmvc-tests/springmvc-tests-simplified-mapping-with-springboot/src/test/resources/logback.xml
new file mode 100644
index 0000000..897ed2e
--- /dev/null
+++ b/integration-tests/springmvc-tests/springmvc-tests-simplified-mapping-with-springboot/src/test/resources/logback.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<configuration scan="true">
+  <jmxConfigurator/>
+  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+    <encoder>
+      <pattern>%d [%level] [%thread][%marker] - %msg (%F:%L\)%n</pattern>
+    </encoder>
+  </appender>
+  <logger name="org.apache.servicecomb.common.javassist.JavassistUtils" level="WARN"/>
+  <logger name="org.apache.servicecomb.core.definition.schema.ProducerSchemaFactory" level="WARN"/>
+  <root level="WARN">
+    <appender-ref ref="STDOUT"/>
+  </root>
+</configuration>
\ No newline at end of file


[servicecomb-java-chassis] 02/05: [SCB-1726]fix all TODOs in demos

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/servicecomb-java-chassis.git

commit 704386e0b33737729615162d33b326eac5694c10
Author: liubao <bi...@qq.com>
AuthorDate: Sun Jan 19 19:17:16 2020 +0800

    [SCB-1726]fix all TODOs in demos
---
 .../src/main/resources/archetype-resources/pom.xml |   4 +
 .../src/main/resources/archetype-resources/pom.xml |   4 +
 .../src/main/resources/archetype-resources/pom.xml |   4 +
 .../converter/SwaggerToProtoGenerator.java         |  12 +-
 .../converter/TestSwaggerToProtoGenerator.java     |   8 ++
 .../protobuf/utils/TestProtobufSchemaUtils.java    | 145 ---------------------
 coverage-reports/pom.xml                           |   4 +
 demo/perf/pom.xml                                  |   4 +
 .../org/apache/servicecomb/it/ConsumerMain.java    |   2 +-
 .../apache/servicecomb/it/junit/ITJUnitUtils.java  |   3 +-
 .../servicecomb/it/schema/generic/MyEndpoint.java  |   2 +-
 .../it/schema/generic/MyEndpointWithInterface.java |   4 +-
 .../demo/pojo/test/endpoints/SmartCareImpl.java    |   2 -
 integration-tests/pom.xml                          |   7 +
 java-chassis-distribution/pom.xml                  |   4 +
 solutions/solution-basic/pom.xml                   |   4 +
 .../services/org.apache.servicecomb.core.Transport |   1 -
 .../transport/highway/TestHighwayClient.java       |  34 -----
 .../transport/highway/TestHighwayCodec.java        |   1 +
 19 files changed, 61 insertions(+), 188 deletions(-)

diff --git a/archetypes/business-service-jaxrs/src/main/resources/archetype-resources/pom.xml b/archetypes/business-service-jaxrs/src/main/resources/archetype-resources/pom.xml
index 81064f7..38bf5f8 100644
--- a/archetypes/business-service-jaxrs/src/main/resources/archetype-resources/pom.xml
+++ b/archetypes/business-service-jaxrs/src/main/resources/archetype-resources/pom.xml
@@ -49,6 +49,10 @@
     </dependency>
     <dependency>
       <groupId>org.apache.servicecomb</groupId>
+      <artifactId>transport-highway</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
       <artifactId>provider-jaxrs</artifactId>
     </dependency>
     <dependency>
diff --git a/archetypes/business-service-pojo/src/main/resources/archetype-resources/pom.xml b/archetypes/business-service-pojo/src/main/resources/archetype-resources/pom.xml
index 4f33529..5824e4a 100644
--- a/archetypes/business-service-pojo/src/main/resources/archetype-resources/pom.xml
+++ b/archetypes/business-service-pojo/src/main/resources/archetype-resources/pom.xml
@@ -48,6 +48,10 @@
     </dependency>
     <dependency>
       <groupId>org.apache.servicecomb</groupId>
+      <artifactId>transport-highway</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
       <artifactId>provider-pojo</artifactId>
     </dependency>
     <dependency>
diff --git a/archetypes/business-service-springmvc/src/main/resources/archetype-resources/pom.xml b/archetypes/business-service-springmvc/src/main/resources/archetype-resources/pom.xml
index fecb804..f08fa06 100644
--- a/archetypes/business-service-springmvc/src/main/resources/archetype-resources/pom.xml
+++ b/archetypes/business-service-springmvc/src/main/resources/archetype-resources/pom.xml
@@ -48,6 +48,10 @@
     </dependency>
     <dependency>
       <groupId>org.apache.servicecomb</groupId>
+      <artifactId>transport-highway</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
       <artifactId>provider-springmvc</artifactId>
     </dependency>
     <dependency>
diff --git a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerToProtoGenerator.java b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerToProtoGenerator.java
index 7859617..7f38649 100644
--- a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerToProtoGenerator.java
+++ b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerToProtoGenerator.java
@@ -71,7 +71,7 @@ public class SwaggerToProtoGenerator {
   // not java package
   // better to be: app_${app}.mid_{microservice}.sid_{schemaId}
   public SwaggerToProtoGenerator(String protoPackage, Swagger swagger) {
-    this.protoPackage = protoPackage;
+    this.protoPackage = escapePackageName(protoPackage);
     this.swagger = swagger;
   }
 
@@ -92,6 +92,14 @@ public class SwaggerToProtoGenerator {
     return createProto();
   }
 
+  public static String escapePackageName(String name) {
+    return name.replaceAll("\\-", "_");
+  }
+
+  public static String escapeMessageName(String name) {
+    return name.replaceAll("\\.", "_");
+  }
+
   private void convertDefinitions() {
     if (swagger.getDefinitions() == null) {
       return;
@@ -217,7 +225,7 @@ public class SwaggerToProtoGenerator {
     }
 
     // message name cannot have . (package separator)
-    return prefix + StringUtils.capitalize(convertSwaggerType(adapter).replaceAll("\\.", "_"));
+    return prefix + StringUtils.capitalize(escapeMessageName(convertSwaggerType(adapter)));
   }
 
   private void wrapPropertyToMessage(String protoName, Object property) {
diff --git a/common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/internal/converter/TestSwaggerToProtoGenerator.java b/common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/internal/converter/TestSwaggerToProtoGenerator.java
index 8fc1650..9fdc15f 100644
--- a/common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/internal/converter/TestSwaggerToProtoGenerator.java
+++ b/common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/internal/converter/TestSwaggerToProtoGenerator.java
@@ -45,4 +45,12 @@ public class TestSwaggerToProtoGenerator {
     Assert.assertEquals(protoContent.replaceAll("\r\n", "\n"),
         new ProtoToStringGenerator(proto).protoToString().replaceAll("\r\n", "\n"));
   }
+
+  @Test
+  public void testEscape() {
+    Assert.assertEquals("hello_my_service", SwaggerToProtoGenerator.escapeMessageName("hello.my.service"));
+    Assert.assertEquals("hello_my_service", SwaggerToProtoGenerator.escapeMessageName("hello_my_service"));
+    Assert.assertEquals("hello.my_service", SwaggerToProtoGenerator.escapePackageName("hello.my-service"));
+    Assert.assertEquals("hello.test.test", SwaggerToProtoGenerator.escapePackageName("hello.test.test"));
+  }
 }
diff --git a/common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/utils/TestProtobufSchemaUtils.java b/common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/utils/TestProtobufSchemaUtils.java
deleted file mode 100644
index fe27f6f..0000000
--- a/common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/utils/TestProtobufSchemaUtils.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.codec.protobuf.utils;
-
-//import java.lang.reflect.Array;
-//import java.util.HashMap;
-//import java.util.Map;
-//
-//import org.apache.servicecomb.common.javassist.FieldConfig;
-//import org.hamcrest.Matchers;
-//import org.junit.Assert;
-//import org.junit.Test;
-//
-//import io.protostuff.ByteArrayInput;
-//import io.protostuff.Input;
-//import io.protostuff.LinkedBuffer;
-//import io.protostuff.ProtobufOutput;
-
-public class TestProtobufSchemaUtils {
-  // TODO : WK add unit test case for different WrapSchema
-//  class MyClassLoader extends ClassLoader {
-//    public MyClassLoader() {
-//      super(Thread.currentThread().getContextClassLoader());
-//    }
-//  }
-//
-//  ScopedProtobufSchemaManager scopedProtobufSchemaManager = ScopedProtobufSchemaManager.INSTANCE;
-//
-//  public static class TestMap {
-//    public Map<String, String> map = new HashMap<>();
-//
-//    public TestMap() {
-//      map.put("asdf", "jjj");
-//    }
-//  }
-//
-//  @Test
-//  public void testMap() throws Exception {
-//    TestMap tm = new TestMap();
-//    TestMap tmResult = writeThenRead(tm);
-//    Assert.assertEquals(tm.map, tmResult.map);
-//
-//    Map<String, String> map = new HashMap<>();
-//    map.put("aaa", "bbb");
-//    testSchema(map);
-//  }
-//
-//  @Test
-//  public void wrapPrimitive() throws Exception {
-//    Assert.assertNotNull(WrapType.ARGS_WRAP);
-//    Assert.assertNotNull(WrapType.NORMAL_WRAP);
-//    testSchema(1);
-//    testSchema("test");
-//    testSchema(WrapType.ARGS_WRAP);
-//    Assert.assertTrue(true);
-//  }
-//
-//  @Test
-//  public void wrapArray() throws Exception {
-//    Assert.assertNotNull(WrapType.ARGS_WRAP);
-//    Assert.assertNotNull(WrapType.NORMAL_WRAP);
-//    testArraySchema(new byte[] {0, 1, 2});
-//    testArraySchema(new int[] {0, 1, 2});
-//    testArraySchema(new String[] {"a", "b"});
-//    testArraySchema(new WrapType[] {WrapType.ARGS_WRAP, WrapType.NORMAL_WRAP});
-//    Assert.assertTrue(true);
-//  }
-//
-//  @Test
-//  public void notWrap() throws Exception {
-//    FieldConfig expect = new FieldConfig();
-//    expect.setName("test");
-//
-//    FieldConfig result = writeThenRead(expect);
-//    Assert.assertEquals(expect.getName(), result.getName());
-//  }
-//
-//  private void testSchema(Object expect) throws Exception {
-//    Object result = writeThenRead(expect);
-//    Assert.assertEquals(expect, result);
-//  }
-//
-//  private void testArraySchema(Object expect) throws Exception {
-//    Object result = writeThenRead(expect);
-//
-//    int expectLen = Array.getLength(expect);
-//    Assert.assertEquals(expectLen, Array.getLength(result));
-//    for (int idx = 0; idx < expectLen; idx++) {
-//      Assert.assertEquals(Array.get(expect, idx), Array.get(result, idx));
-//    }
-//  }
-//
-//  @SuppressWarnings("unchecked")
-//  private <T> T writeThenRead(T value) throws Exception {
-//    WrapSchema schema = scopedProtobufSchemaManager.getOrCreateSchema(value.getClass());
-//
-//    byte[] bytes = toByteArray(schema, value);
-//    Object result = toObject(schema, bytes);
-//    return (T) result;
-//  }
-//
-//  private byte[] toByteArray(WrapSchema schema, Object value) throws Exception {
-//    LinkedBuffer linkedBuffer = LinkedBuffer.allocate();
-//    ProtobufOutput output = new ProtobufOutput(linkedBuffer);
-//
-//    schema.writeObject(output, value);
-//    return output.toByteArray();
-//  }
-//
-//  private Object toObject(WrapSchema schema, byte[] bytes) throws Exception {
-//    Input input = new ByteArrayInput(bytes, false);
-//
-//    return schema.readObject(input);
-//  }
-//
-//  @Test
-//  public void object() throws Exception {
-//    WrapSchema schema = scopedProtobufSchemaManager.getOrCreateSchema(Object.class);
-//
-//    LinkedBuffer linkedBuf = LinkedBuffer.allocate();
-//    ProtobufOutput output = new ProtobufOutput(linkedBuf);
-//    schema.writeObject(output, 1);
-//
-//    Input input = new ByteArrayInput(output.toByteArray(), false);
-//    Object result = schema.readObject(input);
-//
-//    Assert.assertEquals(1, result);
-//    Assert.assertThat(result, Matchers.instanceOf(Integer.class));
-//  }
-}
diff --git a/coverage-reports/pom.xml b/coverage-reports/pom.xml
index df81a76..7aab075 100644
--- a/coverage-reports/pom.xml
+++ b/coverage-reports/pom.xml
@@ -108,6 +108,10 @@
     </dependency>
     <dependency>
       <groupId>org.apache.servicecomb</groupId>
+      <artifactId>transport-highway</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
       <artifactId>common-protobuf</artifactId>
     </dependency>
     <dependency>
diff --git a/demo/perf/pom.xml b/demo/perf/pom.xml
index a983b18..144113f 100644
--- a/demo/perf/pom.xml
+++ b/demo/perf/pom.xml
@@ -42,6 +42,10 @@
     </dependency>
     <dependency>
       <groupId>org.apache.servicecomb</groupId>
+      <artifactId>transport-highway</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
       <artifactId>inspector</artifactId>
     </dependency>
 
diff --git a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java
index 7f03569..ef852b0 100644
--- a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java
+++ b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/ConsumerMain.java
@@ -109,7 +109,7 @@ public class ConsumerMain {
     ITJUnitUtils.runWithHighwayAndRest(TestChangeTransport.class);
     ITJUnitUtils.runWithHighwayAndRest(TestDataTypePrimitive.class);
     ITJUnitUtils.runWithHighwayAndRest(TestAnnotatedAttribute.class);
-    // TODO fix SCB-1448 later
+    // TODO : WEAK RPC & highway both not support this now , need fix it
     //    ITJUnitUtils.runWithHighwayAndRest(TestMyService.class);
 
     // only rest support default value feature
diff --git a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/junit/ITJUnitUtils.java b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/junit/ITJUnitUtils.java
index 4735006..346f961 100644
--- a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/junit/ITJUnitUtils.java
+++ b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/junit/ITJUnitUtils.java
@@ -160,7 +160,8 @@ public final class ITJUnitUtils {
   }
 
   public static void runWithHighwayAndRest(Class<?>... classes) throws Throwable {
-    //runWithTransports(Arrays.asList(Const.HIGHWAY, Const.RESTFUL), classes);
+    // TODO: WEAK recover highway integration tests
+//    runWithTransports(Arrays.asList(Const.HIGHWAY, Const.RESTFUL), classes);
     runWithTransports(Arrays.asList(Const.RESTFUL), classes);
   }
 
diff --git a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/generic/MyEndpoint.java b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/generic/MyEndpoint.java
index 77b3221..c206569 100644
--- a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/generic/MyEndpoint.java
+++ b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/generic/MyEndpoint.java
@@ -19,7 +19,7 @@ package org.apache.servicecomb.it.schema.generic;
 
 import org.springframework.beans.factory.annotation.Autowired;
 
-// TODO fix SCB-1448 later
+// TODO : WEAK RPC & highway both not support this now , need fix it
 //@RpcSchema(schemaId = "MyEndpoint")
 public class MyEndpoint extends AbstractBaseService<PersonBean> implements IMyService {
   public MyEndpoint(@Autowired IMyService other) {
diff --git a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/generic/MyEndpointWithInterface.java b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/generic/MyEndpointWithInterface.java
index 5e4fc71..b016b17 100644
--- a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/generic/MyEndpointWithInterface.java
+++ b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/generic/MyEndpointWithInterface.java
@@ -18,9 +18,11 @@ package org.apache.servicecomb.it.schema.generic;
 
 import java.util.List;
 
+import org.apache.servicecomb.provider.pojo.RpcSchema;
+
 import io.swagger.annotations.ApiOperation;
 
-// TODO fix SCB-1448 later
+// TODO : WEAK RPC & highway both not support this now , need fix it
 //@RpcSchema(schemaId = "MyEndpointWithInterface")
 public class MyEndpointWithInterface implements IMyService {
   @Override
diff --git a/integration-tests/pojo-test/src/test/java/org/apache/servicecomb/demo/pojo/test/endpoints/SmartCareImpl.java b/integration-tests/pojo-test/src/test/java/org/apache/servicecomb/demo/pojo/test/endpoints/SmartCareImpl.java
index 3b62907..ca45b0a 100644
--- a/integration-tests/pojo-test/src/test/java/org/apache/servicecomb/demo/pojo/test/endpoints/SmartCareImpl.java
+++ b/integration-tests/pojo-test/src/test/java/org/apache/servicecomb/demo/pojo/test/endpoints/SmartCareImpl.java
@@ -31,7 +31,6 @@ public class SmartCareImpl implements SmartCare {
 
   @Override
   public Response addApplication(Application application) {
-    // TODO: add application
     LOG.info(application.toString());
 
     Response resp = new Response();
@@ -43,7 +42,6 @@ public class SmartCareImpl implements SmartCare {
   @SuppressWarnings("divzero")
   @Override
   public Response delApplication(String appName) {
-    // TODO: delete application
     LOG.info(appName);
 
     try {
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 7617afe..30cadb1 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -95,6 +95,13 @@
       <groupId>org.apache.servicecomb</groupId>
       <artifactId>transport-rest-vertx</artifactId>
     </dependency>
+    <!-- TODO : WEAK recover highway integration tests -->
+    <!--
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>transport-highway</artifactId>
+    </dependency>
+    -->
     <dependency>
       <groupId>org.apache.servicecomb</groupId>
       <artifactId>provider-springmvc</artifactId>
diff --git a/java-chassis-distribution/pom.xml b/java-chassis-distribution/pom.xml
index 564cda6..4f97aee 100644
--- a/java-chassis-distribution/pom.xml
+++ b/java-chassis-distribution/pom.xml
@@ -255,6 +255,10 @@
     </dependency>
     <dependency>
       <groupId>org.apache.servicecomb</groupId>
+      <artifactId>transport-highway</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
       <artifactId>transport-rest-servlet</artifactId>
     </dependency>
     <dependency>
diff --git a/solutions/solution-basic/pom.xml b/solutions/solution-basic/pom.xml
index 9559521..a3606e1 100644
--- a/solutions/solution-basic/pom.xml
+++ b/solutions/solution-basic/pom.xml
@@ -51,6 +51,10 @@
     </dependency>
     <dependency>
       <groupId>org.apache.servicecomb</groupId>
+      <artifactId>transport-highway</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
       <artifactId>transport-rest-servlet</artifactId>
     </dependency>
 
diff --git a/transports/transport-highway/src/main/resources/META-INF/services/org.apache.servicecomb.core.Transport b/transports/transport-highway/src/main/resources/META-INF/services/org.apache.servicecomb.core.Transport
index 3e91266..25f1bb2 100644
--- a/transports/transport-highway/src/main/resources/META-INF/services/org.apache.servicecomb.core.Transport
+++ b/transports/transport-highway/src/main/resources/META-INF/services/org.apache.servicecomb.core.Transport
@@ -15,5 +15,4 @@
 # limitations under the License.
 #
 
-# TODO: turn on highway transport
 org.apache.servicecomb.transport.highway.HighwayTransport
diff --git a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayClient.java b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayClient.java
index cf609a2..823c87b 100644
--- a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayClient.java
+++ b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayClient.java
@@ -32,7 +32,6 @@ import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
 import org.apache.servicecomb.foundation.vertx.VertxUtils;
 import org.apache.servicecomb.foundation.vertx.client.ClientPoolManager;
 import org.apache.servicecomb.foundation.vertx.client.tcp.AbstractTcpClientPackage;
-import org.apache.servicecomb.foundation.vertx.client.tcp.NetClientWrapper;
 import org.apache.servicecomb.foundation.vertx.client.tcp.TcpClientConfig;
 import org.apache.servicecomb.foundation.vertx.client.tcp.TcpData;
 import org.apache.servicecomb.foundation.vertx.client.tcp.TcpResponseCallback;
@@ -244,37 +243,4 @@ public class TestHighwayClient {
     Assert.assertEquals(nanoTime, invocationStageTrace.getStartClientFiltersResponse());
     Assert.assertEquals(nanoTime, invocationStageTrace.getFinishClientFiltersResponse());
   }
-
-  @Test
-  public void testCreateLogin(@Mocked NetClientWrapper netClientWrapper) throws Exception {
-    // TODO : WK unit test
-
-//    ProtobufCompatibleUtils.init();
-//
-//    HighwayClientConnection connection =
-//        new HighwayClientConnection(null, netClientWrapper, "highway://127.0.0.1:7890");
-//    TcpOutputStream os = connection.createLogin();
-//    ByteBuf buf = os.getBuffer().getByteBuf();
-//
-//    byte[] magic = new byte[TcpParser.TCP_MAGIC.length];
-//    buf.readBytes(magic);
-//    Assert.assertArrayEquals(TcpParser.TCP_MAGIC, magic);
-//    Assert.assertEquals(os.getMsgId(), buf.readLong());
-//
-//    int start = TcpParser.TCP_HEADER_LENGTH;
-//    int totalLen = buf.readInt();
-//    int headerLen = buf.readInt();
-//    Buffer headerBuffer =
-//        os.getBuffer().slice(start, start + headerLen);
-//    int end = start + totalLen;
-//    start += headerLen;
-//    Buffer bodyBuffer = os.getBuffer().slice(start, end);
-
-
-//    RequestHeader header = RequestHeader.readObject(headerBuffer);
-//    Assert.assertEquals(MsgType.LOGIN, header.getMsgType());
-//
-//    LoginRequest login = LoginRequest.readObject(bodyBuffer);
-//    Assert.assertEquals(Const.HIGHWAY, login.getProtocol());
-  }
 }
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 e77d364..e0cd2df 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
@@ -47,6 +47,7 @@ import io.netty.buffer.ByteBuf;
 import io.vertx.core.buffer.Buffer;
 import mockit.Mocked;
 
+@SuppressWarnings({"unchecked", "rawtypes"})
 public class TestHighwayCodec {
   private OperationProtobuf operationProtobuf = null;
 


[servicecomb-java-chassis] 01/05: [SCB-1726]fix all TODOs in demos

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/servicecomb-java-chassis.git

commit ef972eb51a2f5c8e0f06a664b2b46c7a5215832f
Author: liubao <bi...@qq.com>
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);
   }
 }


[servicecomb-java-chassis] 04/05: [SCB-1725]turn on integration tests of highway and fix known problem

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/servicecomb-java-chassis.git

commit a5c91e69f34d35028c3234391b962900f57dde2e
Author: liubao <bi...@qq.com>
AuthorDate: Tue Jan 21 13:02:46 2020 +0800

    [SCB-1725]turn on integration tests of highway and fix known problem
---
 .../converter/SwaggerToProtoGenerator.java         |  14 +-
 .../converter/TestSwaggerToProtoGenerator.java     |   3 +
 .../core/definition/OperationConfig.java           |   2 +-
 .../common/utils/LambdaMetafactoryUtils.java       |  47 +----
 .../foundation/common/utils/bean/BoolSetter.java   |  21 --
 .../foundation/common/utils/bean/ByteGetter.java   |  21 --
 .../foundation/common/utils/bean/ByteSetter.java   |  21 --
 .../foundation/common/utils/bean/DoubleGetter.java |  21 --
 .../foundation/common/utils/bean/DoubleSetter.java |  21 --
 .../foundation/common/utils/bean/FloatGetter.java  |  21 --
 .../foundation/common/utils/bean/FloatSetter.java  |  21 --
 .../foundation/common/utils/bean/IntGetter.java    |  21 --
 .../foundation/common/utils/bean/IntSetter.java    |  21 --
 .../foundation/common/utils/bean/LongGetter.java   |  21 --
 .../foundation/common/utils/bean/LongSetter.java   |  21 --
 .../foundation/common/utils/bean/ShortGetter.java  |  21 --
 .../foundation/common/utils/bean/ShortSetter.java  |  21 --
 .../common/utils/TestLambdaMetafactoryUtils.java   |   6 +-
 .../common/utils/TestLambdaPerformance.java        |   3 +-
 .../scalar/AbstractScalarReadSchemas.java          |   6 +-
 .../deserializer/scalar/BoolReadSchemas.java       |   3 +-
 .../deserializer/scalar/DoubleReadSchemas.java     |   3 +-
 .../deserializer/scalar/EnumsReadSchemas.java      |   3 +-
 .../deserializer/scalar/FloatReadSchemas.java      |   3 +-
 .../serializer/repeated/RepeatedWriteSchemas.java  |  41 +---
 .../schema/serializer/scalar/BoolWriteSchemas.java |  13 +-
 .../serializer/scalar/BytesWriteSchemas.java       |   8 +-
 .../serializer/scalar/DoubleWriteSchemas.java      |  13 +-
 .../schema/serializer/scalar/EnumWriteSchemas.java |  14 +-
 .../serializer/scalar/Fixed32WriteSchemas.java     |  11 +-
 .../serializer/scalar/Fixed64WriteSchemas.java     |  11 +-
 .../serializer/scalar/FloatWriteSchemas.java       |  11 +-
 .../serializer/scalar/Int32WriteSchemas.java       |  11 +-
 .../serializer/scalar/Int64WriteSchemas.java       |  11 +-
 .../serializer/scalar/SFixed32WriteSchemas.java    |  11 +-
 .../serializer/scalar/SFixed64WriteSchemas.java    |  11 +-
 .../serializer/scalar/SInt32WriteSchemas.java      |  11 +-
 .../serializer/scalar/SInt64WriteSchemas.java      |  11 +-
 .../serializer/scalar/StringWriteSchemas.java      |  10 +-
 .../serializer/scalar/UInt32WriteSchemas.java      |  11 +-
 .../serializer/scalar/UInt64WriteSchemas.java      |  11 +-
 .../internal/bean/TestBeanDescriptorManager.java   |  10 +-
 .../schema/objectparams/FlattenObjectRequest.java  | 216 ++++++++++-----------
 .../schema/objectparams/FlattenObjectResponse.java | 216 ++++++++++-----------
 .../schema/objectparams/RecursiveObjectParam.java  |   2 +-
 .../testcase/TestDefaultJsonValueJaxrsSchema.java  |   3 +-
 .../servicecomb/it/testcase/TestParamCodec.java    |  29 +--
 .../it/testcase/TestParamCodecEdge.java            |  11 +-
 .../objectparams/TestJAXRSObjectParamType.java     |  33 ++--
 .../objectparams/TestRPCObjectParamType.java       |  30 +--
 .../objectparams/TestSpringMVCObjectParamType.java |  95 ++++-----
 .../it-edge/src/main/resources/microservice.yaml   |  11 ++
 .../servicecomb/it/schema/ParamCodecSchema.java    |  10 -
 .../it/schema/ParamCodecSchemaRestOnly.java        |  23 ++-
 integration-tests/pom.xml                          |   3 -
 55 files changed, 469 insertions(+), 809 deletions(-)

diff --git a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerToProtoGenerator.java b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerToProtoGenerator.java
index 7f38649..c6e1cab 100644
--- a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerToProtoGenerator.java
+++ b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerToProtoGenerator.java
@@ -100,6 +100,13 @@ public class SwaggerToProtoGenerator {
     return name.replaceAll("\\.", "_");
   }
 
+  public static boolean isValidEnum(String name) {
+    if (name.contains(".") || name.contains("-")) {
+      return false;
+    }
+    return true;
+  }
+
   private void convertDefinitions() {
     if (swagger.getDefinitions() == null) {
       return;
@@ -250,7 +257,12 @@ public class SwaggerToProtoGenerator {
 
     appendLine(msgStringBuilder, "enum %s {", enumName);
     for (int idx = 0; idx < enums.size(); idx++) {
-      appendLine(msgStringBuilder, "  %s =%d;", enums.get(idx), idx);
+      if (isValidEnum(enums.get(idx))) {
+        appendLine(msgStringBuilder, "  %s =%d;", enums.get(idx), idx);
+      } else {
+        throw new IllegalStateException(
+            String.format("enum class [%s] name [%s] not supported by protobuffer.", enumName, enums.get(idx)));
+      }
     }
     appendLine(msgStringBuilder, "}");
   }
diff --git a/common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/internal/converter/TestSwaggerToProtoGenerator.java b/common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/internal/converter/TestSwaggerToProtoGenerator.java
index 9fdc15f..03bd678 100644
--- a/common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/internal/converter/TestSwaggerToProtoGenerator.java
+++ b/common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/internal/converter/TestSwaggerToProtoGenerator.java
@@ -52,5 +52,8 @@ public class TestSwaggerToProtoGenerator {
     Assert.assertEquals("hello_my_service", SwaggerToProtoGenerator.escapeMessageName("hello_my_service"));
     Assert.assertEquals("hello.my_service", SwaggerToProtoGenerator.escapePackageName("hello.my-service"));
     Assert.assertEquals("hello.test.test", SwaggerToProtoGenerator.escapePackageName("hello.test.test"));
+    Assert.assertEquals(false, SwaggerToProtoGenerator.isValidEnum("hello.test.test"));
+    Assert.assertEquals(false, SwaggerToProtoGenerator.isValidEnum("hello.my-service"));
+    Assert.assertEquals(true, SwaggerToProtoGenerator.isValidEnum("My_ENum"));
   }
 }
diff --git a/core/src/main/java/org/apache/servicecomb/core/definition/OperationConfig.java b/core/src/main/java/org/apache/servicecomb/core/definition/OperationConfig.java
index c087fce..7a5b7e7 100644
--- a/core/src/main/java/org/apache/servicecomb/core/definition/OperationConfig.java
+++ b/core/src/main/java/org/apache/servicecomb/core/definition/OperationConfig.java
@@ -86,7 +86,7 @@ public class OperationConfig {
   private long nanoRestRequestWaitInPoolTimeout;
 
   @InjectProperty(keys = {
-      "operation.${service}.transport", // Deprecated
+      "operation${op-priority}.transport", // Deprecated
       "references.transport${op-priority}"
   })
   private String transport;
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/LambdaMetafactoryUtils.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/LambdaMetafactoryUtils.java
index 910dd5e..6152f4c 100644
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/LambdaMetafactoryUtils.java
+++ b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/LambdaMetafactoryUtils.java
@@ -25,25 +25,9 @@ import java.lang.invoke.MethodType;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.servicecomb.foundation.common.utils.bean.BoolGetter;
-import org.apache.servicecomb.foundation.common.utils.bean.BoolSetter;
-import org.apache.servicecomb.foundation.common.utils.bean.ByteGetter;
-import org.apache.servicecomb.foundation.common.utils.bean.ByteSetter;
-import org.apache.servicecomb.foundation.common.utils.bean.DoubleGetter;
-import org.apache.servicecomb.foundation.common.utils.bean.DoubleSetter;
-import org.apache.servicecomb.foundation.common.utils.bean.FloatGetter;
-import org.apache.servicecomb.foundation.common.utils.bean.FloatSetter;
+
 import org.apache.servicecomb.foundation.common.utils.bean.Getter;
-import org.apache.servicecomb.foundation.common.utils.bean.IntGetter;
-import org.apache.servicecomb.foundation.common.utils.bean.IntSetter;
-import org.apache.servicecomb.foundation.common.utils.bean.LongGetter;
-import org.apache.servicecomb.foundation.common.utils.bean.LongSetter;
 import org.apache.servicecomb.foundation.common.utils.bean.Setter;
-import org.apache.servicecomb.foundation.common.utils.bean.ShortGetter;
-import org.apache.servicecomb.foundation.common.utils.bean.ShortSetter;
 
 public final class LambdaMetafactoryUtils {
   private static Field allowedModesField;
@@ -53,31 +37,8 @@ public final class LambdaMetafactoryUtils {
 
   private static final Lookup LOOKUP = MethodHandles.lookup();
 
-  private static final Map<Class<?>, Class<?>> GETTER_MAP = new HashMap<>();
-
-  private static final Map<Class<?>, Class<?>> SETTER_MAP = new HashMap<>();
-
   static {
     enhanceLambda();
-    initGetterSetterMap();
-  }
-
-  private static void initGetterSetterMap() {
-    GETTER_MAP.put(boolean.class, BoolGetter.class);
-    GETTER_MAP.put(byte.class, ByteGetter.class);
-    GETTER_MAP.put(short.class, ShortGetter.class);
-    GETTER_MAP.put(int.class, IntGetter.class);
-    GETTER_MAP.put(long.class, LongGetter.class);
-    GETTER_MAP.put(float.class, FloatGetter.class);
-    GETTER_MAP.put(double.class, DoubleGetter.class);
-
-    SETTER_MAP.put(boolean.class, BoolSetter.class);
-    SETTER_MAP.put(byte.class, ByteSetter.class);
-    SETTER_MAP.put(short.class, ShortSetter.class);
-    SETTER_MAP.put(int.class, IntSetter.class);
-    SETTER_MAP.put(long.class, LongSetter.class);
-    SETTER_MAP.put(float.class, FloatSetter.class);
-    SETTER_MAP.put(double.class, DoubleSetter.class);
   }
 
   private static void enhanceLambda() {
@@ -163,8 +124,7 @@ public final class LambdaMetafactoryUtils {
   }
 
   public static <T> T createGetter(Method getMethod) {
-    Class<?> getterCls = GETTER_MAP.getOrDefault(getMethod.getReturnType(), Getter.class);
-    return createLambda(getMethod, getterCls);
+    return createLambda(getMethod, Getter.class);
   }
 
   // slower than reflect directly
@@ -181,8 +141,7 @@ public final class LambdaMetafactoryUtils {
   }
 
   public static <T> T createSetter(Method setMethod) throws Throwable {
-    Class<?> setterCls = SETTER_MAP.getOrDefault(setMethod.getParameterTypes()[0], Setter.class);
-    return createLambda(setMethod, setterCls);
+    return createLambda(setMethod, Setter.class);
   }
 
   // slower than reflect directly
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/BoolSetter.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/BoolSetter.java
deleted file mode 100644
index 8cbacb5..0000000
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/BoolSetter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.foundation.common.utils.bean;
-
-public interface BoolSetter<T> {
-  void set(T instance, boolean value);
-}
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/ByteGetter.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/ByteGetter.java
deleted file mode 100644
index c4bab67..0000000
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/ByteGetter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.foundation.common.utils.bean;
-
-public interface ByteGetter<T> {
-  byte get(T instance);
-}
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/ByteSetter.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/ByteSetter.java
deleted file mode 100644
index 952d06b..0000000
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/ByteSetter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.foundation.common.utils.bean;
-
-public interface ByteSetter<T> {
-  void set(T instance, byte value);
-}
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/DoubleGetter.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/DoubleGetter.java
deleted file mode 100644
index 5349c4c..0000000
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/DoubleGetter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.foundation.common.utils.bean;
-
-public interface DoubleGetter<T> {
-  double get(T instance);
-}
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/DoubleSetter.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/DoubleSetter.java
deleted file mode 100644
index c39a802..0000000
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/DoubleSetter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.foundation.common.utils.bean;
-
-public interface DoubleSetter<T> {
-  void set(T instance, double value);
-}
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/FloatGetter.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/FloatGetter.java
deleted file mode 100644
index 405d233..0000000
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/FloatGetter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.foundation.common.utils.bean;
-
-public interface FloatGetter<T> {
-  float get(T instance);
-}
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/FloatSetter.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/FloatSetter.java
deleted file mode 100644
index 7d4b75a..0000000
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/FloatSetter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.foundation.common.utils.bean;
-
-public interface FloatSetter<T> {
-  void set(T instance, float value);
-}
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/IntGetter.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/IntGetter.java
deleted file mode 100644
index b7aaf29..0000000
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/IntGetter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.foundation.common.utils.bean;
-
-public interface IntGetter<T> {
-  int get(T instance);
-}
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/IntSetter.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/IntSetter.java
deleted file mode 100644
index 0a0425e..0000000
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/IntSetter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.foundation.common.utils.bean;
-
-public interface IntSetter<T> {
-  void set(T instance, int value);
-}
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/LongGetter.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/LongGetter.java
deleted file mode 100644
index 8f4d68d..0000000
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/LongGetter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.foundation.common.utils.bean;
-
-public interface LongGetter<T> {
-  long get(T instance);
-}
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/LongSetter.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/LongSetter.java
deleted file mode 100644
index a0ba4f9..0000000
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/LongSetter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.foundation.common.utils.bean;
-
-public interface LongSetter<T> {
-  void set(T instance, long value);
-}
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/ShortGetter.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/ShortGetter.java
deleted file mode 100644
index bea64f4..0000000
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/ShortGetter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.foundation.common.utils.bean;
-
-public interface ShortGetter<T> {
-  short get(T instance);
-}
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/ShortSetter.java b/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/ShortSetter.java
deleted file mode 100644
index db741cb..0000000
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/ShortSetter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.servicecomb.foundation.common.utils.bean;
-
-public interface ShortSetter<T> {
-  void set(T instance, short value);
-}
diff --git a/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/utils/TestLambdaMetafactoryUtils.java b/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/utils/TestLambdaMetafactoryUtils.java
index 40672cb..fc4f39b 100644
--- a/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/utils/TestLambdaMetafactoryUtils.java
+++ b/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/utils/TestLambdaMetafactoryUtils.java
@@ -25,8 +25,6 @@ import java.util.function.Function;
 import java.util.function.Supplier;
 
 import org.apache.servicecomb.foundation.common.utils.bean.Getter;
-import org.apache.servicecomb.foundation.common.utils.bean.IntGetter;
-import org.apache.servicecomb.foundation.common.utils.bean.IntSetter;
 import org.apache.servicecomb.foundation.common.utils.bean.Setter;
 import org.hamcrest.Matchers;
 import org.junit.Assert;
@@ -70,8 +68,8 @@ public class TestLambdaMetafactoryUtils {
   @SuppressWarnings("unchecked")
   @Test
   public void createGetterSetterByMethod() throws Throwable {
-    IntGetter<Model> getter = LambdaMetafactoryUtils.createGetter(Model.class.getMethod("getF1"));
-    IntSetter<Model> setter = LambdaMetafactoryUtils.createSetter(Model.class.getMethod("setF1", int.class));
+    Getter<Model, Integer> getter = LambdaMetafactoryUtils.createGetter(Model.class.getMethod("getF1"));
+    Setter<Model, Integer> setter = LambdaMetafactoryUtils.createSetter(Model.class.getMethod("setF1", int.class));
     BiFunction<Object, Object, Object> echo = LambdaMetafactoryUtils
         .createLambda(Model.class.getMethod("echo", List.class), BiFunction.class);
 
diff --git a/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/utils/TestLambdaPerformance.java b/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/utils/TestLambdaPerformance.java
index ab92c86..d60c068 100644
--- a/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/utils/TestLambdaPerformance.java
+++ b/foundations/foundation-common/src/test/java/org/apache/servicecomb/foundation/common/utils/TestLambdaPerformance.java
@@ -24,7 +24,6 @@ import java.lang.reflect.Method;
 
 import org.apache.servicecomb.foundation.common.utils.TestLambdaMetafactoryUtils.Model;
 import org.apache.servicecomb.foundation.common.utils.bean.Getter;
-import org.apache.servicecomb.foundation.common.utils.bean.IntGetter;
 
 public class TestLambdaPerformance {
   static Model model = new Model();
@@ -38,7 +37,7 @@ public class TestLambdaPerformance {
 
   static MethodHandle mh_f1_getter;
 
-  static IntGetter<Model> lambda_f1_method_getter;
+  static Getter<Model, Integer> lambda_f1_method_getter;
 
   static Field f1_field;
 
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/AbstractScalarReadSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/AbstractScalarReadSchemas.java
index 83366a4..89bfb0d 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/AbstractScalarReadSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/AbstractScalarReadSchemas.java
@@ -16,8 +16,6 @@
  */
 package org.apache.servicecomb.foundation.protobuf.internal.schema.deserializer.scalar;
 
-import org.apache.servicecomb.foundation.common.utils.bean.IntSetter;
-import org.apache.servicecomb.foundation.common.utils.bean.LongSetter;
 import org.apache.servicecomb.foundation.common.utils.bean.Setter;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
 
@@ -35,7 +33,7 @@ public class AbstractScalarReadSchemas {
   }
 
   static abstract class AbstractIntPrimitiveSchema<T> extends FieldSchema<T> {
-    protected final IntSetter<T> setter;
+    protected final Setter<T, Integer> setter;
 
     public AbstractIntPrimitiveSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor.getJavaType());
@@ -53,7 +51,7 @@ public class AbstractScalarReadSchemas {
   }
 
   static abstract class AbstractLongPrimitiveSchema<T> extends FieldSchema<T> {
-    protected final LongSetter<T> setter;
+    protected final Setter<T, Long> setter;
 
     public AbstractLongPrimitiveSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor.getJavaType());
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/BoolReadSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/BoolReadSchemas.java
index a6b1e75..d543a7b 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/BoolReadSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/BoolReadSchemas.java
@@ -18,7 +18,6 @@ package org.apache.servicecomb.foundation.protobuf.internal.schema.deserializer.
 
 import java.io.IOException;
 
-import org.apache.servicecomb.foundation.common.utils.bean.BoolSetter;
 import org.apache.servicecomb.foundation.common.utils.bean.Setter;
 import org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
@@ -61,7 +60,7 @@ public class BoolReadSchemas {
   }
 
   private static class BooleanPrimitiveSchema<T> extends FieldSchema<T> {
-    private final BoolSetter<T> setter;
+    private final Setter<T, Boolean> setter;
 
     public BooleanPrimitiveSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor.getJavaType());
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/DoubleReadSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/DoubleReadSchemas.java
index dbac060..2eb5fa1 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/DoubleReadSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/DoubleReadSchemas.java
@@ -18,7 +18,6 @@ package org.apache.servicecomb.foundation.protobuf.internal.schema.deserializer.
 
 import java.io.IOException;
 
-import org.apache.servicecomb.foundation.common.utils.bean.DoubleSetter;
 import org.apache.servicecomb.foundation.common.utils.bean.Setter;
 import org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
@@ -61,7 +60,7 @@ public class DoubleReadSchemas {
   }
 
   private static class DoublePrimitiveSchema<T> extends FieldSchema<T> {
-    private final DoubleSetter<T> setter;
+    private final Setter<T, Double> setter;
 
     public DoublePrimitiveSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor.getJavaType());
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/EnumsReadSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/EnumsReadSchemas.java
index 1ca9fed..2299b05 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/EnumsReadSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/EnumsReadSchemas.java
@@ -18,7 +18,6 @@ package org.apache.servicecomb.foundation.protobuf.internal.schema.deserializer.
 
 import java.io.IOException;
 
-import org.apache.servicecomb.foundation.common.utils.bean.IntSetter;
 import org.apache.servicecomb.foundation.common.utils.bean.Setter;
 import org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
@@ -96,7 +95,7 @@ public class EnumsReadSchemas {
   }
 
   private static class IntPrimitiveEnumSchema<T> extends FieldSchema<T> {
-    private final IntSetter<T> setter;
+    private final Setter<T, Integer> setter;
 
     public IntPrimitiveEnumSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor.getJavaType());
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/FloatReadSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/FloatReadSchemas.java
index 46879c1..971329d 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/FloatReadSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/scalar/FloatReadSchemas.java
@@ -18,7 +18,6 @@ package org.apache.servicecomb.foundation.protobuf.internal.schema.deserializer.
 
 import java.io.IOException;
 
-import org.apache.servicecomb.foundation.common.utils.bean.FloatSetter;
 import org.apache.servicecomb.foundation.common.utils.bean.Setter;
 import org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
@@ -61,7 +60,7 @@ public class FloatReadSchemas {
   }
 
   private static class FloatPrimitiveSchema<T> extends FieldSchema<T> {
-    private final FloatSetter<T> setter;
+    private final Setter<T, Float> setter;
 
     public FloatPrimitiveSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor.getJavaType());
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/repeated/RepeatedWriteSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/repeated/RepeatedWriteSchemas.java
index 4a7702f..5d0a332 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/repeated/RepeatedWriteSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/repeated/RepeatedWriteSchemas.java
@@ -17,13 +17,10 @@
 package org.apache.servicecomb.foundation.protobuf.internal.schema.serializer.repeated;
 
 import java.io.IOException;
-import java.util.Collection;
 
 import org.apache.servicecomb.foundation.common.utils.bean.Getter;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
 
-import com.fasterxml.jackson.databind.JavaType;
-
 import io.protostuff.OutputEx;
 import io.protostuff.compiler.model.Field;
 import io.protostuff.runtime.FieldSchema;
@@ -32,16 +29,7 @@ public class RepeatedWriteSchemas {
   public static <T, ELE_TYPE> FieldSchema<T> create(Field protoField,
       PropertyDescriptor propertyDescriptor,
       AbstractWriters<ELE_TYPE> writers) {
-    JavaType javaType = propertyDescriptor.getJavaType();
-    if (writers.arrayClass.isAssignableFrom(javaType.getRawClass())) {
-      return new ArraySchema<>(protoField, propertyDescriptor, writers);
-    }
-
-    if (Collection.class.isAssignableFrom(javaType.getRawClass())) {
-      return new CollectionSchema<>(protoField, propertyDescriptor, writers);
-    }
-
-    return new DynamicSchema<>(protoField, propertyDescriptor, writers);
+    return new CollectionSchema<>(protoField, propertyDescriptor, writers);
   }
 
   static class DynamicSchema<T, ELE_TYPE> extends FieldSchema<T> {
@@ -62,28 +50,8 @@ public class RepeatedWriteSchemas {
     }
   }
 
-  private static class ArraySchema<T, ELE_TYPE> extends DynamicSchema<T, ELE_TYPE> {
-    private final Getter<T, ELE_TYPE[]> getter;
-
-    public ArraySchema(Field protoField, PropertyDescriptor propertyDescriptor,
-        AbstractWriters<ELE_TYPE> writers) {
-      super(protoField, propertyDescriptor, writers);
-      this.getter = propertyDescriptor.getGetter();
-    }
-
-    @Override
-    public final void getAndWriteTo(OutputEx output, T message) throws IOException {
-      ELE_TYPE[] value = getter.get(message);
-      if (value == null) {
-        return;
-      }
-
-      writers.arrayWriter.writeTo(output, value);
-    }
-  }
-
   private static class CollectionSchema<T, ELE_TYPE> extends DynamicSchema<T, ELE_TYPE> {
-    private final Getter<T, Collection<ELE_TYPE>> getter;
+    private final Getter<T, Object> getter;
 
     public CollectionSchema(Field protoField, PropertyDescriptor propertyDescriptor,
         AbstractWriters<ELE_TYPE> writers) {
@@ -93,12 +61,11 @@ public class RepeatedWriteSchemas {
 
     @Override
     public final void getAndWriteTo(OutputEx output, T message) throws IOException {
-      Collection<ELE_TYPE> value = getter.get(message);
+      Object value = getter.get(message);
       if (value == null) {
         return;
       }
-
-      writers.collectionWriter.writeTo(output, value);
+      this.writeTo(output, value);
     }
   }
 }
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/BoolWriteSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/BoolWriteSchemas.java
index a687a82..9b5711e 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/BoolWriteSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/BoolWriteSchemas.java
@@ -18,7 +18,6 @@ package org.apache.servicecomb.foundation.protobuf.internal.schema.serializer.sc
 
 import java.io.IOException;
 
-import org.apache.servicecomb.foundation.common.utils.bean.BoolGetter;
 import org.apache.servicecomb.foundation.common.utils.bean.Getter;
 import org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
@@ -37,7 +36,7 @@ public class BoolWriteSchemas {
       return new BooleanSchema<>(protoField, propertyDescriptor);
     }
 
-    return new BooleanDynamicSchema<>(protoField, propertyDescriptor);
+    return new BooleanSchema<>(protoField, propertyDescriptor);
   }
 
   private static class BooleanDynamicSchema<T> extends FieldSchema<T> {
@@ -77,25 +76,25 @@ public class BoolWriteSchemas {
   }
 
   private static class BooleanSchema<T> extends BooleanDynamicSchema<T> {
-    protected final Getter<T, Boolean> getter;
+    protected final Getter<T, Object> getter;
 
     public BooleanSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
 
-      this.getter = javaType.isPrimitive() ? null : propertyDescriptor.getGetter();
+      this.getter = propertyDescriptor.getGetter();
     }
 
     @Override
     public final void getAndWriteTo(OutputEx output, T message) throws IOException {
-      Boolean value = getter.get(message);
+      Object value = getter.get(message);
       if (value != null) {
-        output.writeScalarBool(tag, tagSize, value);
+        writeTo(output, value);
       }
     }
   }
 
   private static class BooleanPrimitiveSchema<T> extends BooleanDynamicSchema<T> {
-    private final BoolGetter<T> primitiveGetter;
+    private final Getter<T, Boolean> primitiveGetter;
 
     public BooleanPrimitiveSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/BytesWriteSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/BytesWriteSchemas.java
index 03352c5..865e4a7 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/BytesWriteSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/BytesWriteSchemas.java
@@ -32,7 +32,7 @@ public class BytesWriteSchemas {
       return new BytesSchema<>(protoField, propertyDescriptor);
     }
 
-    return new BytesDynamicSchema<>(protoField, propertyDescriptor);
+    return new BytesSchema<>(protoField, propertyDescriptor);
   }
 
   private static class BytesDynamicSchema<T> extends FieldSchema<T> {
@@ -52,7 +52,7 @@ public class BytesWriteSchemas {
   }
 
   private static class BytesSchema<T> extends BytesDynamicSchema<T> {
-    protected final Getter<T, byte[]> getter;
+    protected final Getter<T, Object> getter;
 
     public BytesSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
@@ -62,9 +62,9 @@ public class BytesWriteSchemas {
 
     @Override
     public final void getAndWriteTo(OutputEx output, T message) throws IOException {
-      byte[] value = getter.get(message);
+      Object value = getter.get(message);
       if (value != null) {
-        output.writeByteArray(tag, tagSize, value);
+        writeTo(output, value);
       }
     }
   }
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/DoubleWriteSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/DoubleWriteSchemas.java
index 5839ba0..174ed3c 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/DoubleWriteSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/DoubleWriteSchemas.java
@@ -18,7 +18,6 @@ package org.apache.servicecomb.foundation.protobuf.internal.schema.serializer.sc
 
 import java.io.IOException;
 
-import org.apache.servicecomb.foundation.common.utils.bean.DoubleGetter;
 import org.apache.servicecomb.foundation.common.utils.bean.Getter;
 import org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
@@ -37,7 +36,7 @@ public class DoubleWriteSchemas {
       return new DoubleSchema<>(protoField, propertyDescriptor);
     }
 
-    return new DoubleDynamicSchema<>(protoField, propertyDescriptor);
+    return new DoubleSchema<>(protoField, propertyDescriptor);
   }
 
   private static class DoubleDynamicSchema<T> extends FieldSchema<T> {
@@ -72,25 +71,25 @@ public class DoubleWriteSchemas {
   }
 
   private static class DoubleSchema<T> extends DoubleDynamicSchema<T> {
-    protected final Getter<T, Double> getter;
+    protected final Getter<T, Object> getter;
 
     public DoubleSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
 
-      this.getter = javaType.isPrimitive() ? null : propertyDescriptor.getGetter();
+      this.getter = propertyDescriptor.getGetter();
     }
 
     @Override
     public final void getAndWriteTo(OutputEx output, T message) throws IOException {
-      Double value = getter.get(message);
+      Object value = getter.get(message);
       if (value != null) {
-        output.writeScalarDouble(tag, tagSize, value);
+        writeTo(output, value);
       }
     }
   }
 
   private static class DoublePrimitiveSchema<T> extends DoubleDynamicSchema<T> {
-    private final DoubleGetter<T> primitiveGetter;
+    private final Getter<T, Double> primitiveGetter;
 
     public DoublePrimitiveSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/EnumWriteSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/EnumWriteSchemas.java
index 09f26f4..b7d0754 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/EnumWriteSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/EnumWriteSchemas.java
@@ -34,7 +34,7 @@ public class EnumWriteSchemas {
       return new EnumSchema<>(protoField, propertyDescriptor);
     }
 
-    return new EnumDynamicSchema<>(protoField, propertyDescriptor);
+    return new EnumSchema<>(protoField, propertyDescriptor);
   }
 
   private static class EnumDynamicSchema<T> extends FieldSchema<T> {
@@ -106,23 +106,19 @@ public class EnumWriteSchemas {
   }
 
   private static class EnumSchema<T> extends EnumDynamicSchema<T> {
-    protected final Getter<T, Enum<?>> getter;
+    protected final Getter<T, Object> getter;
 
     public EnumSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
 
-      this.getter = javaType.isPrimitive() ? null : propertyDescriptor.getGetter();
+      this.getter = propertyDescriptor.getGetter();
     }
 
     @Override
     public final void getAndWriteTo(OutputEx output, T message) throws IOException {
-      // already be a Enum, need to check if it is a valid Enum?
-      // wrong case:
-      //   expect a Color enum, but be a Sharp enum?, who will do this?
-      // for safe, check it......
-      Enum<?> value = getter.get(message);
+      Object value = getter.get(message);
       if (value != null) {
-        stringWrite(output, value.name());
+        writeTo(output, value);
       }
     }
   }
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Fixed32WriteSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Fixed32WriteSchemas.java
index f4c6f6e..546accf 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Fixed32WriteSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Fixed32WriteSchemas.java
@@ -19,7 +19,6 @@ package org.apache.servicecomb.foundation.protobuf.internal.schema.serializer.sc
 import java.io.IOException;
 
 import org.apache.servicecomb.foundation.common.utils.bean.Getter;
-import org.apache.servicecomb.foundation.common.utils.bean.IntGetter;
 import org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
 
@@ -37,7 +36,7 @@ public class Fixed32WriteSchemas {
       return new Fixed32Schema<>(protoField, propertyDescriptor);
     }
 
-    return new Fixed32DynamicSchema<>(protoField, propertyDescriptor);
+    return new Fixed32Schema<>(protoField, propertyDescriptor);
   }
 
   private static class Fixed32DynamicSchema<T> extends FieldSchema<T> {
@@ -72,7 +71,7 @@ public class Fixed32WriteSchemas {
   }
 
   private static class Fixed32Schema<T> extends Fixed32DynamicSchema<T> {
-    protected final Getter<T, Integer> getter;
+    protected final Getter<T, Object> getter;
 
     public Fixed32Schema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
@@ -82,15 +81,15 @@ public class Fixed32WriteSchemas {
 
     @Override
     public final void getAndWriteTo(OutputEx output, T message) throws IOException {
-      Integer value = getter.get(message);
+      Object value = getter.get(message);
       if (value != null) {
-        output.writeScalarFixed32(tag, tagSize, value);
+        writeTo(output, value);
       }
     }
   }
 
   private static class Fixed32PrimitiveSchema<T> extends Fixed32DynamicSchema<T> {
-    private final IntGetter<T> primitiveGetter;
+    private final Getter<T, Integer> primitiveGetter;
 
     public Fixed32PrimitiveSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Fixed64WriteSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Fixed64WriteSchemas.java
index b3addeb..f4fad8b 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Fixed64WriteSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Fixed64WriteSchemas.java
@@ -19,7 +19,6 @@ package org.apache.servicecomb.foundation.protobuf.internal.schema.serializer.sc
 import java.io.IOException;
 
 import org.apache.servicecomb.foundation.common.utils.bean.Getter;
-import org.apache.servicecomb.foundation.common.utils.bean.LongGetter;
 import org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
 
@@ -37,7 +36,7 @@ public class Fixed64WriteSchemas {
       return new Fixed64Schema<>(protoField, propertyDescriptor);
     }
 
-    return new Fixed64DynamicSchema<>(protoField, propertyDescriptor);
+    return new Fixed64Schema<>(protoField, propertyDescriptor);
   }
 
   private static class Fixed64DynamicSchema<T> extends FieldSchema<T> {
@@ -72,7 +71,7 @@ public class Fixed64WriteSchemas {
   }
 
   private static class Fixed64Schema<T> extends Fixed64DynamicSchema<T> {
-    protected final Getter<T, Long> getter;
+    protected final Getter<T, Object> getter;
 
     public Fixed64Schema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
@@ -82,15 +81,15 @@ public class Fixed64WriteSchemas {
 
     @Override
     public final void getAndWriteTo(OutputEx output, T message) throws IOException {
-      Long value = getter.get(message);
+      Object value = getter.get(message);
       if (value != null) {
-        output.writeScalarFixed64(tag, tagSize, value);
+        writeTo(output, value);
       }
     }
   }
 
   private static class Fixed64PrimitiveSchema<T> extends Fixed64DynamicSchema<T> {
-    private final LongGetter<T> primitiveGetter;
+    private final Getter<T, Long> primitiveGetter;
 
     public Fixed64PrimitiveSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/FloatWriteSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/FloatWriteSchemas.java
index 7687c4d..c721b9b 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/FloatWriteSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/FloatWriteSchemas.java
@@ -18,7 +18,6 @@ package org.apache.servicecomb.foundation.protobuf.internal.schema.serializer.sc
 
 import java.io.IOException;
 
-import org.apache.servicecomb.foundation.common.utils.bean.FloatGetter;
 import org.apache.servicecomb.foundation.common.utils.bean.Getter;
 import org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
@@ -37,7 +36,7 @@ public class FloatWriteSchemas {
       return new FloatSchema<>(protoField, propertyDescriptor);
     }
 
-    return new FloatDynamicSchema<>(protoField, propertyDescriptor);
+    return new FloatSchema<>(protoField, propertyDescriptor);
   }
 
   private static class FloatDynamicSchema<T> extends FieldSchema<T> {
@@ -72,7 +71,7 @@ public class FloatWriteSchemas {
   }
 
   private static class FloatSchema<T> extends FloatDynamicSchema<T> {
-    protected final Getter<T, Float> getter;
+    protected final Getter<T, Object> getter;
 
     public FloatSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
@@ -82,15 +81,15 @@ public class FloatWriteSchemas {
 
     @Override
     public final void getAndWriteTo(OutputEx output, T message) throws IOException {
-      Float value = getter.get(message);
+      Object value = getter.get(message);
       if (value != null) {
-        output.writeScalarFloat(tag, tagSize, value);
+        writeTo(output, value);
       }
     }
   }
 
   private static class FloatPrimitiveSchema<T> extends FloatDynamicSchema<T> {
-    private final FloatGetter<T> primitiveGetter;
+    private final Getter<T, Float> primitiveGetter;
 
     public FloatPrimitiveSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
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 615afb6..8d202d6 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
@@ -19,7 +19,6 @@ package org.apache.servicecomb.foundation.protobuf.internal.schema.serializer.sc
 import java.io.IOException;
 
 import org.apache.servicecomb.foundation.common.utils.bean.Getter;
-import org.apache.servicecomb.foundation.common.utils.bean.IntGetter;
 import org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
 
@@ -37,7 +36,7 @@ public final class Int32WriteSchemas {
       return new Int32Schema<>(protoField, propertyDescriptor);
     }
 
-    return new Int32DynamicSchema<>(protoField, propertyDescriptor);
+    return new Int32Schema<>(protoField, propertyDescriptor);
   }
 
   private static class Int32DynamicSchema<T> extends FieldSchema<T> {
@@ -75,7 +74,7 @@ public final class Int32WriteSchemas {
   }
 
   private static class Int32Schema<T> extends Int32DynamicSchema<T> {
-    protected final Getter<T, Integer> getter;
+    protected final Getter<T, Object> getter;
 
     public Int32Schema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
@@ -85,15 +84,15 @@ public final class Int32WriteSchemas {
 
     @Override
     public final void getAndWriteTo(OutputEx output, T message) throws IOException {
-      Integer value = getter.get(message);
+      Object value = getter.get(message);
       if (value != null) {
-        output.writeScalarInt32(tag, tagSize, value);
+        writeTo(output, value);
       }
     }
   }
 
   private static final class Int32PrimitiveSchema<T> extends Int32DynamicSchema<T> {
-    private final IntGetter<T> primitiveGetter;
+    private final Getter<T, Integer> primitiveGetter;
 
     public Int32PrimitiveSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Int64WriteSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Int64WriteSchemas.java
index 71edff8..1856229 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Int64WriteSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/Int64WriteSchemas.java
@@ -22,7 +22,6 @@ import java.time.temporal.ChronoField;
 import java.util.Date;
 
 import org.apache.servicecomb.foundation.common.utils.bean.Getter;
-import org.apache.servicecomb.foundation.common.utils.bean.LongGetter;
 import org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
 
@@ -40,7 +39,7 @@ public class Int64WriteSchemas {
       return new Int64Schema<>(protoField, propertyDescriptor);
     }
 
-    return new Int64DynamicSchema<>(protoField, propertyDescriptor);
+    return new Int64Schema<>(protoField, propertyDescriptor);
   }
 
   private static class Int64DynamicSchema<T> extends FieldSchema<T> {
@@ -87,7 +86,7 @@ public class Int64WriteSchemas {
   }
 
   private static class Int64Schema<T> extends Int64DynamicSchema<T> {
-    protected final Getter<T, Long> getter;
+    protected final Getter<T, Object> getter;
 
     public Int64Schema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
@@ -97,15 +96,15 @@ public class Int64WriteSchemas {
 
     @Override
     public final void getAndWriteTo(OutputEx output, T message) throws IOException {
-      Long value = getter.get(message);
+      Object value = getter.get(message);
       if (value != null) {
-        output.writeScalarInt64(tag, tagSize, value);
+        this.writeTo(output, value);
       }
     }
   }
 
   private static final class Int64PrimitiveSchema<T> extends Int64DynamicSchema<T> {
-    private final LongGetter<T> primitiveGetter;
+    private final Getter<T, Long> primitiveGetter;
 
     public Int64PrimitiveSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/SFixed32WriteSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/SFixed32WriteSchemas.java
index b803b07..fe4fddc 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/SFixed32WriteSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/SFixed32WriteSchemas.java
@@ -19,7 +19,6 @@ package org.apache.servicecomb.foundation.protobuf.internal.schema.serializer.sc
 import java.io.IOException;
 
 import org.apache.servicecomb.foundation.common.utils.bean.Getter;
-import org.apache.servicecomb.foundation.common.utils.bean.IntGetter;
 import org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
 
@@ -37,7 +36,7 @@ public class SFixed32WriteSchemas {
       return new SFixed32Schema<>(protoField, propertyDescriptor);
     }
 
-    return new SFixed32DynamicSchema<>(protoField, propertyDescriptor);
+    return new SFixed32Schema<>(protoField, propertyDescriptor);
   }
 
   private static class SFixed32DynamicSchema<T> extends FieldSchema<T> {
@@ -72,7 +71,7 @@ public class SFixed32WriteSchemas {
   }
 
   private static class SFixed32Schema<T> extends SFixed32DynamicSchema<T> {
-    protected final Getter<T, Integer> getter;
+    protected final Getter<T, Object> getter;
 
     public SFixed32Schema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
@@ -82,15 +81,15 @@ public class SFixed32WriteSchemas {
 
     @Override
     public final void getAndWriteTo(OutputEx output, T message) throws IOException {
-      Integer value = getter.get(message);
+      Object value = getter.get(message);
       if (value != null) {
-        output.writeScalarSFixed32(tag, tagSize, value);
+        writeTo(output, value);
       }
     }
   }
 
   private static class SFixed32PrimitiveSchema<T> extends SFixed32DynamicSchema<T> {
-    private final IntGetter<T> primitiveGetter;
+    private final Getter<T, Integer> primitiveGetter;
 
     public SFixed32PrimitiveSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/SFixed64WriteSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/SFixed64WriteSchemas.java
index 7803f55..4f1432e 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/SFixed64WriteSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/SFixed64WriteSchemas.java
@@ -19,7 +19,6 @@ package org.apache.servicecomb.foundation.protobuf.internal.schema.serializer.sc
 import java.io.IOException;
 
 import org.apache.servicecomb.foundation.common.utils.bean.Getter;
-import org.apache.servicecomb.foundation.common.utils.bean.LongGetter;
 import org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
 
@@ -37,7 +36,7 @@ public class SFixed64WriteSchemas {
       return new SFixed64Schema<>(protoField, propertyDescriptor);
     }
 
-    return new SFixed64DynamicSchema<>(protoField, propertyDescriptor);
+    return new SFixed64Schema<>(protoField, propertyDescriptor);
   }
 
   private static class SFixed64DynamicSchema<T> extends FieldSchema<T> {
@@ -72,7 +71,7 @@ public class SFixed64WriteSchemas {
   }
 
   private static class SFixed64Schema<T> extends SFixed64DynamicSchema<T> {
-    protected final Getter<T, Long> getter;
+    protected final Getter<T, Object> getter;
 
     public SFixed64Schema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
@@ -82,15 +81,15 @@ public class SFixed64WriteSchemas {
 
     @Override
     public final void getAndWriteTo(OutputEx output, T message) throws IOException {
-      Long value = getter.get(message);
+      Object value = getter.get(message);
       if (value != null) {
-        output.writeScalarSFixed64(tag, tagSize, value);
+        writeTo(output, value);
       }
     }
   }
 
   private static class SFixed64PrimitiveSchema<T> extends SFixed64DynamicSchema<T> {
-    private final LongGetter<T> primitiveGetter;
+    private final Getter<T, Long> primitiveGetter;
 
     public SFixed64PrimitiveSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/SInt32WriteSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/SInt32WriteSchemas.java
index 343926d..18d5413 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/SInt32WriteSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/SInt32WriteSchemas.java
@@ -19,7 +19,6 @@ package org.apache.servicecomb.foundation.protobuf.internal.schema.serializer.sc
 import java.io.IOException;
 
 import org.apache.servicecomb.foundation.common.utils.bean.Getter;
-import org.apache.servicecomb.foundation.common.utils.bean.IntGetter;
 import org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
 
@@ -37,7 +36,7 @@ public class SInt32WriteSchemas {
       return new SInt32Schema<>(protoField, propertyDescriptor);
     }
 
-    return new SInt32DynamicSchema<>(protoField, propertyDescriptor);
+    return new SInt32Schema<>(protoField, propertyDescriptor);
   }
 
   private static class SInt32DynamicSchema<T> extends FieldSchema<T> {
@@ -72,7 +71,7 @@ public class SInt32WriteSchemas {
   }
 
   private static class SInt32Schema<T> extends SInt32DynamicSchema<T> {
-    protected final Getter<T, Integer> getter;
+    protected final Getter<T, Object> getter;
 
     public SInt32Schema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
@@ -82,15 +81,15 @@ public class SInt32WriteSchemas {
 
     @Override
     public final void getAndWriteTo(OutputEx output, T message) throws IOException {
-      Integer value = getter.get(message);
+      Object value = getter.get(message);
       if (value != null) {
-        output.writeScalarSInt32(tag, tagSize, value);
+        writeTo(output, value);
       }
     }
   }
 
   private static class SInt32PrimitiveSchema<T> extends SInt32DynamicSchema<T> {
-    private final IntGetter<T> primitiveGetter;
+    private final Getter<T, Integer> primitiveGetter;
 
     public SInt32PrimitiveSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/SInt64WriteSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/SInt64WriteSchemas.java
index 16a41fc..f085b2c 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/SInt64WriteSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/SInt64WriteSchemas.java
@@ -19,7 +19,6 @@ package org.apache.servicecomb.foundation.protobuf.internal.schema.serializer.sc
 import java.io.IOException;
 
 import org.apache.servicecomb.foundation.common.utils.bean.Getter;
-import org.apache.servicecomb.foundation.common.utils.bean.LongGetter;
 import org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
 
@@ -37,7 +36,7 @@ public class SInt64WriteSchemas {
       return new SInt64Schema<>(protoField, propertyDescriptor);
     }
 
-    return new SInt64DynamicSchema<>(protoField, propertyDescriptor);
+    return new SInt64Schema<>(protoField, propertyDescriptor);
   }
 
   private static class SInt64DynamicSchema<T> extends FieldSchema<T> {
@@ -72,7 +71,7 @@ public class SInt64WriteSchemas {
   }
 
   private static class SInt64Schema<T> extends SInt64DynamicSchema<T> {
-    protected final Getter<T, Long> getter;
+    protected final Getter<T, Object> getter;
 
     public SInt64Schema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
@@ -82,15 +81,15 @@ public class SInt64WriteSchemas {
 
     @Override
     public final void getAndWriteTo(OutputEx output, T message) throws IOException {
-      Long value = getter.get(message);
+      Object value = getter.get(message);
       if (value != null) {
-        output.writeScalarSInt64(tag, tagSize, value);
+        writeTo(output, value);
       }
     }
   }
 
   private static class SInt64PrimitiveSchema<T> extends SInt64DynamicSchema<T> {
-    private final LongGetter<T> primitiveGetter;
+    private final Getter<T, Long> primitiveGetter;
 
     public SInt64PrimitiveSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/StringWriteSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/StringWriteSchemas.java
index 8434e79..18051d6 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/StringWriteSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/StringWriteSchemas.java
@@ -32,7 +32,7 @@ public class StringWriteSchemas {
       return new StringSchema<>(protoField, propertyDescriptor);
     }
 
-    return new StringDynamicSchema<>(protoField, propertyDescriptor);
+    return new StringSchema<>(protoField, propertyDescriptor);
   }
 
   private static class StringDynamicSchema<T> extends FieldSchema<T> {
@@ -65,19 +65,19 @@ public class StringWriteSchemas {
   }
 
   private static class StringSchema<T> extends StringDynamicSchema<T> {
-    protected final Getter<T, String> getter;
+    protected final Getter<T, Object> getter;
 
     public StringSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
 
-      this.getter = javaType.isPrimitive() ? null : propertyDescriptor.getGetter();
+      this.getter = propertyDescriptor.getGetter();
     }
 
     @Override
     public final void getAndWriteTo(OutputEx output, T message) throws IOException {
-      String value = getter.get(message);
+      Object value = getter.get(message);
       if (value != null) {
-        output.writeScalarString(tag, tagSize, value);
+        writeTo(output, value);
       }
     }
   }
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/UInt32WriteSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/UInt32WriteSchemas.java
index 9d89b5f..9a47705 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/UInt32WriteSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/UInt32WriteSchemas.java
@@ -19,7 +19,6 @@ package org.apache.servicecomb.foundation.protobuf.internal.schema.serializer.sc
 import java.io.IOException;
 
 import org.apache.servicecomb.foundation.common.utils.bean.Getter;
-import org.apache.servicecomb.foundation.common.utils.bean.IntGetter;
 import org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
 
@@ -37,7 +36,7 @@ public class UInt32WriteSchemas {
       return new UInt32Schema<>(protoField, propertyDescriptor);
     }
 
-    return new UInt32DynamicSchema<>(protoField, propertyDescriptor);
+    return new UInt32Schema<>(protoField, propertyDescriptor);
   }
 
   private static class UInt32DynamicSchema<T> extends FieldSchema<T> {
@@ -72,7 +71,7 @@ public class UInt32WriteSchemas {
   }
 
   private static class UInt32Schema<T> extends UInt32DynamicSchema<T> {
-    protected final Getter<T, Integer> getter;
+    protected final Getter<T, Object> getter;
 
     public UInt32Schema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
@@ -82,15 +81,15 @@ public class UInt32WriteSchemas {
 
     @Override
     public final void getAndWriteTo(OutputEx output, T message) throws IOException {
-      Integer value = getter.get(message);
+      Object value = getter.get(message);
       if (value != null) {
-        output.writeScalarUInt32(tag, tagSize, value);
+        writeTo(output, value);
       }
     }
   }
 
   private static class UInt32PrimitiveSchema<T> extends UInt32DynamicSchema<T> {
-    private final IntGetter<T> primitiveGetter;
+    private final Getter<T, Integer> primitiveGetter;
 
     public UInt32PrimitiveSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/UInt64WriteSchemas.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/UInt64WriteSchemas.java
index 4234d46..c6ec795 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/UInt64WriteSchemas.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/serializer/scalar/UInt64WriteSchemas.java
@@ -19,7 +19,6 @@ package org.apache.servicecomb.foundation.protobuf.internal.schema.serializer.sc
 import java.io.IOException;
 
 import org.apache.servicecomb.foundation.common.utils.bean.Getter;
-import org.apache.servicecomb.foundation.common.utils.bean.LongGetter;
 import org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils;
 import org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor;
 
@@ -37,7 +36,7 @@ public class UInt64WriteSchemas {
       return new UInt64Schema<>(protoField, propertyDescriptor);
     }
 
-    return new UInt64DynamicSchema<>(protoField, propertyDescriptor);
+    return new UInt64Schema<>(protoField, propertyDescriptor);
   }
 
   private static class UInt64DynamicSchema<T> extends FieldSchema<T> {
@@ -72,7 +71,7 @@ public class UInt64WriteSchemas {
   }
 
   private static class UInt64Schema<T> extends UInt64DynamicSchema<T> {
-    protected final Getter<T, Long> getter;
+    protected final Getter<T, Object> getter;
 
     public UInt64Schema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
@@ -82,15 +81,15 @@ public class UInt64WriteSchemas {
 
     @Override
     public final void getAndWriteTo(OutputEx output, T message) throws IOException {
-      Long value = getter.get(message);
+      Object value = getter.get(message);
       if (value != null) {
-        output.writeScalarUInt64(tag, tagSize, value);
+        writeTo(output, value);
       }
     }
   }
 
   private static class UInt64PrimitiveSchema<T> extends UInt64DynamicSchema<T> {
-    private final LongGetter<T> primitiveGetter;
+    private final Getter<T, Long> primitiveGetter;
 
     public UInt64PrimitiveSchema(Field protoField, PropertyDescriptor propertyDescriptor) {
       super(protoField, propertyDescriptor);
diff --git a/foundations/foundation-protobuf/src/test/java/org/apache/servicecomb/foundation/protobuf/internal/bean/TestBeanDescriptorManager.java b/foundations/foundation-protobuf/src/test/java/org/apache/servicecomb/foundation/protobuf/internal/bean/TestBeanDescriptorManager.java
index 9d2994b..bdbb714 100644
--- a/foundations/foundation-protobuf/src/test/java/org/apache/servicecomb/foundation/protobuf/internal/bean/TestBeanDescriptorManager.java
+++ b/foundations/foundation-protobuf/src/test/java/org/apache/servicecomb/foundation/protobuf/internal/bean/TestBeanDescriptorManager.java
@@ -20,8 +20,6 @@ import java.lang.reflect.Method;
 
 import org.apache.servicecomb.foundation.common.utils.ReflectUtils;
 import org.apache.servicecomb.foundation.common.utils.bean.Getter;
-import org.apache.servicecomb.foundation.common.utils.bean.IntGetter;
-import org.apache.servicecomb.foundation.common.utils.bean.IntSetter;
 import org.apache.servicecomb.foundation.common.utils.bean.Setter;
 import org.junit.Assert;
 import org.junit.Test;
@@ -108,8 +106,8 @@ public class TestBeanDescriptorManager {
   @Test
   public void both() {
     PropertyDescriptor propertyDescriptor = beanDescriptor.getPropertyDescriptors().get("both");
-    ((IntSetter<Model>) propertyDescriptor.getSetter()).set(model, 1);
-    Assert.assertEquals(1, ((IntGetter<Model>) propertyDescriptor.getGetter()).get(model));
+    ((Setter<Model, Integer>) propertyDescriptor.getSetter()).set(model, 1);
+    Assert.assertEquals(1, ((Getter<Model, Integer>) propertyDescriptor.getGetter()).get(model).intValue());
     Assert.assertEquals(1, model.getBoth());
   }
 
@@ -120,7 +118,7 @@ public class TestBeanDescriptorManager {
     Assert.assertNull(propertyDescriptor.getSetter());
 
     model.onlyGet(1);
-    Assert.assertEquals(1, ((IntGetter<Model>) propertyDescriptor.getGetter()).get(model));
+    Assert.assertEquals(1, ((Getter<Model, Integer>) propertyDescriptor.getGetter()).get(model).intValue());
     Assert.assertEquals(1, model.getOnlyGet());
   }
 
@@ -130,7 +128,7 @@ public class TestBeanDescriptorManager {
     PropertyDescriptor propertyDescriptor = beanDescriptor.getPropertyDescriptors().get("onlySet");
     Assert.assertNull(propertyDescriptor.getGetter());
 
-    ((IntSetter<Model>) propertyDescriptor.getSetter()).set(model, 1);
+    ((Setter<Model, Integer>) propertyDescriptor.getSetter()).set(model, 1);
     Assert.assertEquals(1, model.onlySet());
   }
 
diff --git a/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/objectparams/FlattenObjectRequest.java b/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/objectparams/FlattenObjectRequest.java
index eea3ce1..21b7b9f 100644
--- a/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/objectparams/FlattenObjectRequest.java
+++ b/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/objectparams/FlattenObjectRequest.java
@@ -20,56 +20,56 @@ package org.apache.servicecomb.it.schema.objectparams;
 import java.util.Objects;
 
 public class FlattenObjectRequest {
-  private byte aByte;
+  private byte anByte;
 
-  private short aShort;
+  private short anShort;
 
   private int anInt;
 
-  private long aLong;
+  private long anLong;
 
-  private float aFloat;
+  private float anFloat;
 
-  private double aDouble;
+  private double anDouble;
 
-  private boolean aBoolean;
+  private boolean anBoolean;
 
-  private char aChar;
+  private char anChar;
 
-  private Byte aWrappedByte;
+  private Byte anWrappedByte;
 
-  private Short aWrappedShort;
+  private Short anWrappedShort;
 
-  private Integer aWrappedInteger;
+  private Integer anWrappedInteger;
 
-  private Long aWrappedLong;
+  private Long anWrappedLong;
 
-  private Float aWrappedFloat;
+  private Float anWrappedFloat;
 
-  private Double aWrappedDouble;
+  private Double anWrappedDouble;
 
-  private Boolean aWrappedBoolean;
+  private Boolean anWrappedBoolean;
 
-  private Character aWrappedCharacter;
+  private Character anWrappedCharacter;
 
   private String string;
 
   private Color color;
 
-  public byte getaByte() {
-    return aByte;
+  public byte getAnByte() {
+    return anByte;
   }
 
-  public void setaByte(byte aByte) {
-    this.aByte = aByte;
+  public void setAnByte(byte anByte) {
+    this.anByte = anByte;
   }
 
-  public short getaShort() {
-    return aShort;
+  public short getAnShort() {
+    return anShort;
   }
 
-  public void setaShort(short aShort) {
-    this.aShort = aShort;
+  public void setAnShort(short anShort) {
+    this.anShort = anShort;
   }
 
   public int getAnInt() {
@@ -80,108 +80,108 @@ public class FlattenObjectRequest {
     this.anInt = anInt;
   }
 
-  public long getaLong() {
-    return aLong;
+  public long getAnLong() {
+    return anLong;
   }
 
-  public void setaLong(long aLong) {
-    this.aLong = aLong;
+  public void setAnLong(long anLong) {
+    this.anLong = anLong;
   }
 
-  public float getaFloat() {
-    return aFloat;
+  public float getAnFloat() {
+    return anFloat;
   }
 
-  public void setaFloat(float aFloat) {
-    this.aFloat = aFloat;
+  public void setAnFloat(float anFloat) {
+    this.anFloat = anFloat;
   }
 
-  public double getaDouble() {
-    return aDouble;
+  public double getAnDouble() {
+    return anDouble;
   }
 
-  public void setaDouble(double aDouble) {
-    this.aDouble = aDouble;
+  public void setAnDouble(double anDouble) {
+    this.anDouble = anDouble;
   }
 
-  public boolean isaBoolean() {
-    return aBoolean;
+  public boolean isAnBoolean() {
+    return anBoolean;
   }
 
-  public void setaBoolean(boolean aBoolean) {
-    this.aBoolean = aBoolean;
+  public void setAnBoolean(boolean anBoolean) {
+    this.anBoolean = anBoolean;
   }
 
-  public char getaChar() {
-    return aChar;
+  public char getAnChar() {
+    return anChar;
   }
 
-  public void setaChar(char aChar) {
-    this.aChar = aChar;
+  public void setAnChar(char anChar) {
+    this.anChar = anChar;
   }
 
-  public Byte getaWrappedByte() {
-    return aWrappedByte;
+  public Byte getAnWrappedByte() {
+    return anWrappedByte;
   }
 
-  public void setaWrappedByte(Byte aWrappedByte) {
-    this.aWrappedByte = aWrappedByte;
+  public void setAnWrappedByte(Byte anWrappedByte) {
+    this.anWrappedByte = anWrappedByte;
   }
 
-  public Short getaWrappedShort() {
-    return aWrappedShort;
+  public Short getAnWrappedShort() {
+    return anWrappedShort;
   }
 
-  public void setaWrappedShort(Short aWrappedShort) {
-    this.aWrappedShort = aWrappedShort;
+  public void setAnWrappedShort(Short anWrappedShort) {
+    this.anWrappedShort = anWrappedShort;
   }
 
-  public Integer getaWrappedInteger() {
-    return aWrappedInteger;
+  public Integer getAnWrappedInteger() {
+    return anWrappedInteger;
   }
 
-  public void setaWrappedInteger(Integer aWrappedInteger) {
-    this.aWrappedInteger = aWrappedInteger;
+  public void setAnWrappedInteger(Integer anWrappedInteger) {
+    this.anWrappedInteger = anWrappedInteger;
   }
 
-  public Long getaWrappedLong() {
-    return aWrappedLong;
+  public Long getAnWrappedLong() {
+    return anWrappedLong;
   }
 
-  public void setaWrappedLong(Long aWrappedLong) {
-    this.aWrappedLong = aWrappedLong;
+  public void setAnWrappedLong(Long anWrappedLong) {
+    this.anWrappedLong = anWrappedLong;
   }
 
-  public Float getaWrappedFloat() {
-    return aWrappedFloat;
+  public Float getAnWrappedFloat() {
+    return anWrappedFloat;
   }
 
-  public void setaWrappedFloat(Float aWrappedFloat) {
-    this.aWrappedFloat = aWrappedFloat;
+  public void setAnWrappedFloat(Float anWrappedFloat) {
+    this.anWrappedFloat = anWrappedFloat;
   }
 
-  public Double getaWrappedDouble() {
-    return aWrappedDouble;
+  public Double getAnWrappedDouble() {
+    return anWrappedDouble;
   }
 
-  public void setaWrappedDouble(Double aWrappedDouble) {
-    this.aWrappedDouble = aWrappedDouble;
+  public void setAnWrappedDouble(Double anWrappedDouble) {
+    this.anWrappedDouble = anWrappedDouble;
   }
 
-  public Boolean getaWrappedBoolean() {
-    return aWrappedBoolean;
+  public Boolean getAnWrappedBoolean() {
+    return anWrappedBoolean;
   }
 
-  public void setaWrappedBoolean(Boolean aWrappedBoolean) {
-    this.aWrappedBoolean = aWrappedBoolean;
+  public void setAnWrappedBoolean(Boolean anWrappedBoolean) {
+    this.anWrappedBoolean = anWrappedBoolean;
   }
 
-  public Character getaWrappedCharacter() {
-    return aWrappedCharacter;
+  public Character getAnWrappedCharacter() {
+    return anWrappedCharacter;
   }
 
-  public void setaWrappedCharacter(Character aWrappedCharacter) {
-    this.aWrappedCharacter = aWrappedCharacter;
+  public void setAnWrappedCharacter(Character anWrappedCharacter) {
+    this.anWrappedCharacter = anWrappedCharacter;
   }
 
   public String getString() {
@@ -203,22 +203,22 @@ public class FlattenObjectRequest {
   @Override
   public String toString() {
     final StringBuilder sb = new StringBuilder("FlattenObjectRequest{");
-    sb.append("aByte=").append(aByte);
-    sb.append(", aShort=").append(aShort);
+    sb.append("anByte=").append(anByte);
+    sb.append(", anShort=").append(anShort);
     sb.append(", anInt=").append(anInt);
-    sb.append(", aLong=").append(aLong);
-    sb.append(", aFloat=").append(aFloat);
-    sb.append(", aDouble=").append(aDouble);
-    sb.append(", aBoolean=").append(aBoolean);
-    sb.append(", aChar=").append(aChar);
-    sb.append(", aWrappedByte=").append(aWrappedByte);
-    sb.append(", aWrappedShort=").append(aWrappedShort);
-    sb.append(", aWrappedInteger=").append(aWrappedInteger);
-    sb.append(", aWrappedLong=").append(aWrappedLong);
-    sb.append(", aWrappedFloat=").append(aWrappedFloat);
-    sb.append(", aWrappedDouble=").append(aWrappedDouble);
-    sb.append(", aWrappedBoolean=").append(aWrappedBoolean);
-    sb.append(", aWrappedCharacter=").append(aWrappedCharacter);
+    sb.append(", anLong=").append(anLong);
+    sb.append(", anFloat=").append(anFloat);
+    sb.append(", anDouble=").append(anDouble);
+    sb.append(", anBoolean=").append(anBoolean);
+    sb.append(", anChar=").append(anChar);
+    sb.append(", anWrappedByte=").append(anWrappedByte);
+    sb.append(", anWrappedShort=").append(anWrappedShort);
+    sb.append(", anWrappedInteger=").append(anWrappedInteger);
+    sb.append(", anWrappedLong=").append(anWrappedLong);
+    sb.append(", anWrappedFloat=").append(anWrappedFloat);
+    sb.append(", anWrappedDouble=").append(anWrappedDouble);
+    sb.append(", anWrappedBoolean=").append(anWrappedBoolean);
+    sb.append(", anWrappedCharacter=").append(anWrappedCharacter);
     sb.append(", string='").append(string).append('\'');
     sb.append(", color=").append(color);
     sb.append('}');
@@ -234,22 +234,22 @@ public class FlattenObjectRequest {
       return false;
     }
     FlattenObjectRequest that = (FlattenObjectRequest) o;
-    return aByte == that.aByte &&
-        aShort == that.aShort &&
+    return anByte == that.anByte &&
+        anShort == that.anShort &&
         anInt == that.anInt &&
-        aLong == that.aLong &&
-        Float.compare(that.aFloat, aFloat) == 0 &&
-        Double.compare(that.aDouble, aDouble) == 0 &&
-        aBoolean == that.aBoolean &&
-        aChar == that.aChar &&
-        Objects.equals(aWrappedByte, that.aWrappedByte) &&
-        Objects.equals(aWrappedShort, that.aWrappedShort) &&
-        Objects.equals(aWrappedInteger, that.aWrappedInteger) &&
-        Objects.equals(aWrappedLong, that.aWrappedLong) &&
-        Objects.equals(aWrappedFloat, that.aWrappedFloat) &&
-        Objects.equals(aWrappedDouble, that.aWrappedDouble) &&
-        Objects.equals(aWrappedBoolean, that.aWrappedBoolean) &&
-        Objects.equals(aWrappedCharacter, that.aWrappedCharacter) &&
+        anLong == that.anLong &&
+        Float.compare(that.anFloat, anFloat) == 0 &&
+        Double.compare(that.anDouble, anDouble) == 0 &&
+        anBoolean == that.anBoolean &&
+        anChar == that.anChar &&
+        Objects.equals(anWrappedByte, that.anWrappedByte) &&
+        Objects.equals(anWrappedShort, that.anWrappedShort) &&
+        Objects.equals(anWrappedInteger, that.anWrappedInteger) &&
+        Objects.equals(anWrappedLong, that.anWrappedLong) &&
+        Objects.equals(anWrappedFloat, that.anWrappedFloat) &&
+        Objects.equals(anWrappedDouble, that.anWrappedDouble) &&
+        Objects.equals(anWrappedBoolean, that.anWrappedBoolean) &&
+        Objects.equals(anWrappedCharacter, that.anWrappedCharacter) &&
         Objects.equals(string, that.string) &&
         color == that.color;
   }
@@ -257,8 +257,8 @@ public class FlattenObjectRequest {
   @Override
   public int hashCode() {
     return Objects
-        .hash(aByte, aShort, anInt, aLong, aFloat, aDouble, aBoolean, aChar, aWrappedByte, aWrappedShort,
-            aWrappedInteger,
-            aWrappedLong, aWrappedFloat, aWrappedDouble, aWrappedBoolean, aWrappedCharacter, string, color);
+        .hash(anByte, anShort, anInt, anLong, anFloat, anDouble, anBoolean, anChar, anWrappedByte, anWrappedShort,
+            anWrappedInteger,
+            anWrappedLong, anWrappedFloat, anWrappedDouble, anWrappedBoolean, anWrappedCharacter, string, color);
   }
 }
\ No newline at end of file
diff --git a/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/objectparams/FlattenObjectResponse.java b/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/objectparams/FlattenObjectResponse.java
index 19ce7a3..4c9bece 100644
--- a/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/objectparams/FlattenObjectResponse.java
+++ b/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/objectparams/FlattenObjectResponse.java
@@ -20,56 +20,56 @@ package org.apache.servicecomb.it.schema.objectparams;
 import java.util.Objects;
 
 public class FlattenObjectResponse {
-  private byte aByte;
+  private byte anByte;
 
-  private short aShort;
+  private short anShort;
 
   private int anInt;
 
-  private long aLong;
+  private long anLong;
 
-  private float aFloat;
+  private float anFloat;
 
-  private double aDouble;
+  private double anDouble;
 
-  private boolean aBoolean;
+  private boolean anBoolean;
 
-  private char aChar;
+  private char anChar;
 
-  private Byte aWrappedByte;
+  private Byte anWrappedByte;
 
-  private Short aWrappedShort;
+  private Short anWrappedShort;
 
-  private Integer aWrappedInteger;
+  private Integer anWrappedInteger;
 
-  private Long aWrappedLong;
+  private Long anWrappedLong;
 
-  private Float aWrappedFloat;
+  private Float anWrappedFloat;
 
-  private Double aWrappedDouble;
+  private Double anWrappedDouble;
 
-  private Boolean aWrappedBoolean;
+  private Boolean anWrappedBoolean;
 
-  private Character aWrappedCharacter;
+  private Character anWrappedCharacter;
 
   private String string;
 
   private Color color;
 
-  public byte getaByte() {
-    return aByte;
+  public byte getAnByte() {
+    return anByte;
   }
 
-  public void setaByte(byte aByte) {
-    this.aByte = aByte;
+  public void setAnByte(byte anByte) {
+    this.anByte = anByte;
   }
 
-  public short getaShort() {
-    return aShort;
+  public short getAnShort() {
+    return anShort;
   }
 
-  public void setaShort(short aShort) {
-    this.aShort = aShort;
+  public void setAnShort(short anShort) {
+    this.anShort = anShort;
   }
 
   public int getAnInt() {
@@ -80,108 +80,108 @@ public class FlattenObjectResponse {
     this.anInt = anInt;
   }
 
-  public long getaLong() {
-    return aLong;
+  public long getAnLong() {
+    return anLong;
   }
 
-  public void setaLong(long aLong) {
-    this.aLong = aLong;
+  public void setAnLong(long anLong) {
+    this.anLong = anLong;
   }
 
-  public float getaFloat() {
-    return aFloat;
+  public float getAnFloat() {
+    return anFloat;
   }
 
-  public void setaFloat(float aFloat) {
-    this.aFloat = aFloat;
+  public void setAnFloat(float anFloat) {
+    this.anFloat = anFloat;
   }
 
-  public double getaDouble() {
-    return aDouble;
+  public double getAnDouble() {
+    return anDouble;
   }
 
-  public void setaDouble(double aDouble) {
-    this.aDouble = aDouble;
+  public void setAnDouble(double anDouble) {
+    this.anDouble = anDouble;
   }
 
-  public boolean isaBoolean() {
-    return aBoolean;
+  public boolean isAnBoolean() {
+    return anBoolean;
   }
 
-  public void setaBoolean(boolean aBoolean) {
-    this.aBoolean = aBoolean;
+  public void setAnBoolean(boolean anBoolean) {
+    this.anBoolean = anBoolean;
   }
 
-  public char getaChar() {
-    return aChar;
+  public char getAnChar() {
+    return anChar;
   }
 
-  public void setaChar(char aChar) {
-    this.aChar = aChar;
+  public void setAnChar(char anChar) {
+    this.anChar = anChar;
   }
 
-  public Byte getaWrappedByte() {
-    return aWrappedByte;
+  public Byte getAnWrappedByte() {
+    return anWrappedByte;
   }
 
-  public void setaWrappedByte(Byte aWrappedByte) {
-    this.aWrappedByte = aWrappedByte;
+  public void setAnWrappedByte(Byte anWrappedByte) {
+    this.anWrappedByte = anWrappedByte;
   }
 
-  public Short getaWrappedShort() {
-    return aWrappedShort;
+  public Short getAnWrappedShort() {
+    return anWrappedShort;
   }
 
-  public void setaWrappedShort(Short aWrappedShort) {
-    this.aWrappedShort = aWrappedShort;
+  public void setAnWrappedShort(Short anWrappedShort) {
+    this.anWrappedShort = anWrappedShort;
   }
 
-  public Integer getaWrappedInteger() {
-    return aWrappedInteger;
+  public Integer getAnWrappedInteger() {
+    return anWrappedInteger;
   }
 
-  public void setaWrappedInteger(Integer aWrappedInteger) {
-    this.aWrappedInteger = aWrappedInteger;
+  public void setAnWrappedInteger(Integer anWrappedInteger) {
+    this.anWrappedInteger = anWrappedInteger;
   }
 
-  public Long getaWrappedLong() {
-    return aWrappedLong;
+  public Long getAnWrappedLong() {
+    return anWrappedLong;
   }
 
-  public void setaWrappedLong(Long aWrappedLong) {
-    this.aWrappedLong = aWrappedLong;
+  public void setAnWrappedLong(Long anWrappedLong) {
+    this.anWrappedLong = anWrappedLong;
   }
 
-  public Float getaWrappedFloat() {
-    return aWrappedFloat;
+  public Float getAnWrappedFloat() {
+    return anWrappedFloat;
   }
 
-  public void setaWrappedFloat(Float aWrappedFloat) {
-    this.aWrappedFloat = aWrappedFloat;
+  public void setAnWrappedFloat(Float anWrappedFloat) {
+    this.anWrappedFloat = anWrappedFloat;
   }
 
-  public Double getaWrappedDouble() {
-    return aWrappedDouble;
+  public Double getAnWrappedDouble() {
+    return anWrappedDouble;
   }
 
-  public void setaWrappedDouble(Double aWrappedDouble) {
-    this.aWrappedDouble = aWrappedDouble;
+  public void setAnWrappedDouble(Double anWrappedDouble) {
+    this.anWrappedDouble = anWrappedDouble;
   }
 
-  public Boolean getaWrappedBoolean() {
-    return aWrappedBoolean;
+  public Boolean getAnWrappedBoolean() {
+    return anWrappedBoolean;
   }
 
-  public void setaWrappedBoolean(Boolean aWrappedBoolean) {
-    this.aWrappedBoolean = aWrappedBoolean;
+  public void setAnWrappedBoolean(Boolean anWrappedBoolean) {
+    this.anWrappedBoolean = anWrappedBoolean;
   }
 
-  public Character getaWrappedCharacter() {
-    return aWrappedCharacter;
+  public Character getAnWrappedCharacter() {
+    return anWrappedCharacter;
   }
 
-  public void setaWrappedCharacter(Character aWrappedCharacter) {
-    this.aWrappedCharacter = aWrappedCharacter;
+  public void setAnWrappedCharacter(Character anWrappedCharacter) {
+    this.anWrappedCharacter = anWrappedCharacter;
   }
 
   public String getString() {
@@ -203,22 +203,22 @@ public class FlattenObjectResponse {
   @Override
   public String toString() {
     final StringBuilder sb = new StringBuilder("FlattenObjectResponse{");
-    sb.append("aByte=").append(aByte);
-    sb.append(", aShort=").append(aShort);
+    sb.append("anByte=").append(anByte);
+    sb.append(", anShort=").append(anShort);
     sb.append(", anInt=").append(anInt);
-    sb.append(", aLong=").append(aLong);
-    sb.append(", aFloat=").append(aFloat);
-    sb.append(", aDouble=").append(aDouble);
-    sb.append(", aBoolean=").append(aBoolean);
-    sb.append(", aChar=").append(aChar);
-    sb.append(", aWrappedByte=").append(aWrappedByte);
-    sb.append(", aWrappedShort=").append(aWrappedShort);
-    sb.append(", aWrappedInteger=").append(aWrappedInteger);
-    sb.append(", aWrappedLong=").append(aWrappedLong);
-    sb.append(", aWrappedFloat=").append(aWrappedFloat);
-    sb.append(", aWrappedDouble=").append(aWrappedDouble);
-    sb.append(", aWrappedBoolean=").append(aWrappedBoolean);
-    sb.append(", aWrappedCharacter=").append(aWrappedCharacter);
+    sb.append(", anLong=").append(anLong);
+    sb.append(", anFloat=").append(anFloat);
+    sb.append(", anDouble=").append(anDouble);
+    sb.append(", anBoolean=").append(anBoolean);
+    sb.append(", anChar=").append(anChar);
+    sb.append(", anWrappedByte=").append(anWrappedByte);
+    sb.append(", anWrappedShort=").append(anWrappedShort);
+    sb.append(", anWrappedInteger=").append(anWrappedInteger);
+    sb.append(", anWrappedLong=").append(anWrappedLong);
+    sb.append(", anWrappedFloat=").append(anWrappedFloat);
+    sb.append(", anWrappedDouble=").append(anWrappedDouble);
+    sb.append(", anWrappedBoolean=").append(anWrappedBoolean);
+    sb.append(", anWrappedCharacter=").append(anWrappedCharacter);
     sb.append(", string='").append(string).append('\'');
     sb.append(", color=").append(color);
     sb.append('}');
@@ -234,22 +234,22 @@ public class FlattenObjectResponse {
       return false;
     }
     FlattenObjectResponse that = (FlattenObjectResponse) o;
-    return aByte == that.aByte &&
-        aShort == that.aShort &&
+    return anByte == that.anByte &&
+        anShort == that.anShort &&
         anInt == that.anInt &&
-        aLong == that.aLong &&
-        Float.compare(that.aFloat, aFloat) == 0 &&
-        Double.compare(that.aDouble, aDouble) == 0 &&
-        aBoolean == that.aBoolean &&
-        aChar == that.aChar &&
-        Objects.equals(aWrappedByte, that.aWrappedByte) &&
-        Objects.equals(aWrappedShort, that.aWrappedShort) &&
-        Objects.equals(aWrappedInteger, that.aWrappedInteger) &&
-        Objects.equals(aWrappedLong, that.aWrappedLong) &&
-        Objects.equals(aWrappedFloat, that.aWrappedFloat) &&
-        Objects.equals(aWrappedDouble, that.aWrappedDouble) &&
-        Objects.equals(aWrappedBoolean, that.aWrappedBoolean) &&
-        Objects.equals(aWrappedCharacter, that.aWrappedCharacter) &&
+        anLong == that.anLong &&
+        Float.compare(that.anFloat, anFloat) == 0 &&
+        Double.compare(that.anDouble, anDouble) == 0 &&
+        anBoolean == that.anBoolean &&
+        anChar == that.anChar &&
+        Objects.equals(anWrappedByte, that.anWrappedByte) &&
+        Objects.equals(anWrappedShort, that.anWrappedShort) &&
+        Objects.equals(anWrappedInteger, that.anWrappedInteger) &&
+        Objects.equals(anWrappedLong, that.anWrappedLong) &&
+        Objects.equals(anWrappedFloat, that.anWrappedFloat) &&
+        Objects.equals(anWrappedDouble, that.anWrappedDouble) &&
+        Objects.equals(anWrappedBoolean, that.anWrappedBoolean) &&
+        Objects.equals(anWrappedCharacter, that.anWrappedCharacter) &&
         Objects.equals(string, that.string) &&
         color == that.color;
   }
@@ -257,8 +257,8 @@ public class FlattenObjectResponse {
   @Override
   public int hashCode() {
     return Objects
-        .hash(aByte, aShort, anInt, aLong, aFloat, aDouble, aBoolean, aChar, aWrappedByte, aWrappedShort,
-            aWrappedInteger,
-            aWrappedLong, aWrappedFloat, aWrappedDouble, aWrappedBoolean, aWrappedCharacter, string, color);
+        .hash(anByte, anShort, anInt, anLong, anFloat, anDouble, anBoolean, anChar, anWrappedByte, anWrappedShort,
+            anWrappedInteger,
+            anWrappedLong, anWrappedFloat, anWrappedDouble, anWrappedBoolean, anWrappedCharacter, string, color);
   }
 }
diff --git a/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/objectparams/RecursiveObjectParam.java b/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/objectparams/RecursiveObjectParam.java
index 1ca29ed..0cef05b 100644
--- a/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/objectparams/RecursiveObjectParam.java
+++ b/integration-tests/it-common/src/main/java/org/apache/servicecomb/it/schema/objectparams/RecursiveObjectParam.java
@@ -28,7 +28,7 @@ public class RecursiveObjectParam {
 
   private String string;
 
-  private Color color;
+  private Color color = Color.RED; // If using highway, it's best practise to give default value to the first item. Or should take null equals to default value.
 
   public RecursiveObjectParam() {
   }
diff --git a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDefaultJsonValueJaxrsSchema.java b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDefaultJsonValueJaxrsSchema.java
index 257efe6..204c705 100644
--- a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDefaultJsonValueJaxrsSchema.java
+++ b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDefaultJsonValueJaxrsSchema.java
@@ -40,7 +40,8 @@ public class TestDefaultJsonValueJaxrsSchema {
     Assert.assertEquals("expected:0:0", result);
 
     result = client.getForObject("/queryInput?size=", String.class);
-    Assert.assertEquals("expected:0:", result);
+    // For REST, getParameter will return empty string, but For HIGHWAY, will return 0
+    Assert.assertEquals(true, "expected:0:".equals(result) || "expected:0:0".equals(result));
   }
 
   @SuppressWarnings("unchecked")
diff --git a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestParamCodec.java b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestParamCodec.java
index 073ec18..6c36cc2 100644
--- a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestParamCodec.java
+++ b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestParamCodec.java
@@ -18,10 +18,6 @@
 package org.apache.servicecomb.it.testcase;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-import java.util.Map;
 
 import org.apache.servicecomb.foundation.test.scaffolding.model.Media;
 import org.apache.servicecomb.it.Consumers;
@@ -30,12 +26,17 @@ import org.junit.Test;
 public class TestParamCodec {
   interface ParamCodecSchemaIntf {
     String spaceCharCodec(String pathVal, String q);
+  }
 
+  interface ParamCodecSchemaIntfRestOnly {
     Media enumSpecialName(Media media);
   }
 
   static Consumers<ParamCodecSchemaIntf> consumers = new Consumers<>("paramCodec", ParamCodecSchemaIntf.class);
 
+  static Consumers<ParamCodecSchemaIntfRestOnly> consumersRestOnly = new Consumers<>("paramCodecRestOnly",
+      ParamCodecSchemaIntfRestOnly.class);
+
   @Test
   public void spaceCharEncode_intf() {
     String paramString = "a%2B+%20b%% %20c";
@@ -65,24 +66,24 @@ public class TestParamCodec {
 
   @Test
   public void enumSpecialName_intf() {
-    assertEquals(Media.AAC, consumers.getIntf().enumSpecialName(Media.AAC));
-    assertEquals(Media.FLAC, consumers.getIntf().enumSpecialName(Media.FLAC));
-    assertEquals(Media.H_264, consumers.getIntf().enumSpecialName(Media.H_264));
-    assertEquals(Media.MPEG_2, consumers.getIntf().enumSpecialName(Media.MPEG_2));
-    assertEquals(Media.WMV, consumers.getIntf().enumSpecialName(Media.WMV));
+    assertEquals(Media.AAC, consumersRestOnly.getIntf().enumSpecialName(Media.AAC));
+    assertEquals(Media.FLAC, consumersRestOnly.getIntf().enumSpecialName(Media.FLAC));
+    assertEquals(Media.H_264, consumersRestOnly.getIntf().enumSpecialName(Media.H_264));
+    assertEquals(Media.MPEG_2, consumersRestOnly.getIntf().enumSpecialName(Media.MPEG_2));
+    assertEquals(Media.WMV, consumersRestOnly.getIntf().enumSpecialName(Media.WMV));
   }
 
   @Test
   public void enumSpecialName_rt() {
     assertEquals(Media.AAC,
-        consumers.getSCBRestTemplate().postForObject("/enum/enumSpecialName", Media.AAC, Media.class));
+        consumersRestOnly.getSCBRestTemplate().postForObject("/enum/enumSpecialName", Media.AAC, Media.class));
     assertEquals(Media.FLAC,
-        consumers.getSCBRestTemplate().postForObject("/enum/enumSpecialName", Media.FLAC, Media.class));
+        consumersRestOnly.getSCBRestTemplate().postForObject("/enum/enumSpecialName", Media.FLAC, Media.class));
     assertEquals(Media.H_264,
-        consumers.getSCBRestTemplate().postForObject("/enum/enumSpecialName", Media.H_264, Media.class));
+        consumersRestOnly.getSCBRestTemplate().postForObject("/enum/enumSpecialName", Media.H_264, Media.class));
     assertEquals(Media.MPEG_2,
-        consumers.getSCBRestTemplate().postForObject("/enum/enumSpecialName", Media.MPEG_2, Media.class));
+        consumersRestOnly.getSCBRestTemplate().postForObject("/enum/enumSpecialName", Media.MPEG_2, Media.class));
     assertEquals(Media.WMV,
-        consumers.getSCBRestTemplate().postForObject("/enum/enumSpecialName", Media.WMV, Media.class));
+        consumersRestOnly.getSCBRestTemplate().postForObject("/enum/enumSpecialName", Media.WMV, Media.class));
   }
 }
diff --git a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestParamCodecEdge.java b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestParamCodecEdge.java
index 11d37d2..171c1ce 100644
--- a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestParamCodecEdge.java
+++ b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestParamCodecEdge.java
@@ -40,6 +40,7 @@ public class TestParamCodecEdge {
   private static final Logger LOGGER = LoggerFactory.getLogger(TestParamCodecEdge.class);
 
   static GateRestTemplate client = GateRestTemplate.createEdgeRestTemplate("paramCodec");
+  static GateRestTemplate restOnlyClient = GateRestTemplate.createEdgeRestTemplate("paramCodecRestOnly");
 
   @Test
   public void spaceCharEncode() {
@@ -61,15 +62,15 @@ public class TestParamCodecEdge {
   @Test
   public void enumSpecialName() {
     assertEquals(Media.AAC,
-        client.postForObject("/enum/enumSpecialName", Media.AAC, Media.class));
+        restOnlyClient.postForObject("/enum/enumSpecialName", Media.AAC, Media.class));
     assertEquals(Media.FLAC,
-        client.postForObject("/enum/enumSpecialName", Media.FLAC, Media.class));
+        restOnlyClient.postForObject("/enum/enumSpecialName", Media.FLAC, Media.class));
     assertEquals(Media.H_264,
-        client.postForObject("/enum/enumSpecialName", Media.H_264, Media.class));
+        restOnlyClient.postForObject("/enum/enumSpecialName", Media.H_264, Media.class));
     assertEquals(Media.MPEG_2,
-        client.postForObject("/enum/enumSpecialName", Media.MPEG_2, Media.class));
+        restOnlyClient.postForObject("/enum/enumSpecialName", Media.MPEG_2, Media.class));
     assertEquals(Media.WMV,
-        client.postForObject("/enum/enumSpecialName", Media.WMV, Media.class));
+        restOnlyClient.postForObject("/enum/enumSpecialName", Media.WMV, Media.class));
   }
 
   @Test
diff --git a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/objectparams/TestJAXRSObjectParamType.java b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/objectparams/TestJAXRSObjectParamType.java
index 11b8d2b..6d24a38 100644
--- a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/objectparams/TestJAXRSObjectParamType.java
+++ b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/objectparams/TestJAXRSObjectParamType.java
@@ -130,7 +130,8 @@ public class TestJAXRSObjectParamType {
     responseEntity = consumers.getEdgeRestTemplate()
         .exchange("/testMultiLayerObjectParam", HttpMethod.PUT,
             new HttpEntity<>(null), MultiLayerObjectParam.class);
-    Assert.assertNull(responseEntity.getBody());
+    // highway will not return null object
+    Assert.assertTrue(responseEntity.getBody() == null || responseEntity.getBody().getString() == null);
     Assert.assertEquals(200, responseEntity.getStatusCodeValue());
   }
 
@@ -252,22 +253,22 @@ public class TestJAXRSObjectParamType {
 
   private FlattenObjectRequest createFlattenObjectRequest() {
     FlattenObjectRequest request = new FlattenObjectRequest();
-    request.setaByte((byte) 8);
-    request.setaShort((short) 7);
+    request.setAnByte((byte) 8);
+    request.setAnShort((short) 7);
     request.setAnInt(6);
-    request.setaLong(5);
-    request.setaFloat(4.4f);
-    request.setaDouble(3.3);
-    request.setaBoolean(true);
-    request.setaChar('c');
-    request.setaWrappedByte((byte) 16);
-    request.setaWrappedShort((short) 15);
-    request.setaWrappedInteger(14);
-    request.setaWrappedLong(13L);
-    request.setaWrappedFloat(12.2f);
-    request.setaWrappedDouble(11.1);
-    request.setaWrappedBoolean(true);
-    request.setaWrappedCharacter('d');
+    request.setAnLong(5);
+    request.setAnFloat(4.4f);
+    request.setAnDouble(3.3);
+    request.setAnBoolean(true);
+    request.setAnChar('c');
+    request.setAnWrappedByte((byte) 16);
+    request.setAnWrappedShort((short) 15);
+    request.setAnWrappedInteger(14);
+    request.setAnWrappedLong(13L);
+    request.setAnWrappedFloat(12.2f);
+    request.setAnWrappedDouble(11.1);
+    request.setAnWrappedBoolean(true);
+    request.setAnWrappedCharacter('d');
     request.setString("abc");
     request.setColor(Color.BLUE);
     return request;
diff --git a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/objectparams/TestRPCObjectParamType.java b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/objectparams/TestRPCObjectParamType.java
index 7cd40b7..095ca48 100644
--- a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/objectparams/TestRPCObjectParamType.java
+++ b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/objectparams/TestRPCObjectParamType.java
@@ -169,22 +169,22 @@ public class TestRPCObjectParamType {
 
   private FlattenObjectRequest createFlattenObjectRequest() {
     FlattenObjectRequest request = new FlattenObjectRequest();
-    request.setaByte((byte) 8);
-    request.setaShort((short) 7);
+    request.setAnByte((byte) 8);
+    request.setAnShort((short) 7);
     request.setAnInt(6);
-    request.setaLong(5);
-    request.setaFloat(4.4f);
-    request.setaDouble(3.3);
-    request.setaBoolean(true);
-    request.setaChar('c');
-    request.setaWrappedByte((byte) 16);
-    request.setaWrappedShort((short) 15);
-    request.setaWrappedInteger(14);
-    request.setaWrappedLong(13L);
-    request.setaWrappedFloat(12.2f);
-    request.setaWrappedDouble(11.1);
-    request.setaWrappedBoolean(true);
-    request.setaWrappedCharacter('d');
+    request.setAnLong(5);
+    request.setAnFloat(4.4f);
+    request.setAnDouble(3.3);
+    request.setAnBoolean(true);
+    request.setAnChar('c');
+    request.setAnWrappedByte((byte) 16);
+    request.setAnWrappedShort((short) 15);
+    request.setAnWrappedInteger(14);
+    request.setAnWrappedLong(13L);
+    request.setAnWrappedFloat(12.2f);
+    request.setAnWrappedDouble(11.1);
+    request.setAnWrappedBoolean(true);
+    request.setAnWrappedCharacter('d');
     request.setString("abc");
     request.setColor(Color.BLUE);
     return request;
diff --git a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/objectparams/TestSpringMVCObjectParamType.java b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/objectparams/TestSpringMVCObjectParamType.java
index f9f77a8..69c6093 100644
--- a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/objectparams/TestSpringMVCObjectParamType.java
+++ b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/objectparams/TestSpringMVCObjectParamType.java
@@ -46,10 +46,10 @@ public class TestSpringMVCObjectParamType {
   interface SpringMVCObjectParamTypeSchema extends ObjectParamTypeSchema {
     TestNullFieldAndDefaultValueParam testNullFieldAndDefaultValue(Object request);
 
-    FlattenObjectRequest testQueryObjectParam(byte aByte, short aShort, int anInt, long aLong, float aFloat,
-        double aDouble, boolean aBoolean, char aChar, Byte aWrappedByte, Short aWrappedShort, Integer aWrappedInteger,
-        Long aWrappedLong, Float aWrappedFloat, Double aWrappedDouble, Boolean aWrappedBoolean,
-        Character aWrappedCharacter, String string, Color color);
+    FlattenObjectRequest testQueryObjectParam(byte anByte, short anShort, int anInt, long anLong, float anFloat,
+        double anDouble, boolean anBoolean, char anChar, Byte anWrappedByte, Short anWrappedShort, Integer anWrappedInteger,
+        Long anWrappedLong, Float anWrappedFloat, Double anWrappedDouble, Boolean anWrappedBoolean,
+        Character anWrappedCharacter, String string, Color color);
   }
 
   static Consumers<SpringMVCObjectParamTypeSchema> consumers =
@@ -134,7 +134,8 @@ public class TestSpringMVCObjectParamType {
     responseEntity = consumers.getEdgeRestTemplate()
         .exchange("/testMultiLayerObjectParam", HttpMethod.PUT,
             new HttpEntity<>(null), MultiLayerObjectParam.class);
-    Assert.assertNull(responseEntity.getBody());
+    // Highway will not return null
+    Assert.assertTrue(responseEntity.getBody() == null || responseEntity.getBody().getString() == null);
     Assert.assertEquals(200, responseEntity.getStatusCodeValue());
   }
 
@@ -309,33 +310,33 @@ public class TestSpringMVCObjectParamType {
   public void testQueryObjectParam() {
     FlattenObjectRequest expected = createFlattenObjectRequest();
     FlattenObjectRequest response = consumers.getIntf().testQueryObjectParam(
-        expected.getaByte(), expected.getaShort(), expected.getAnInt(), expected.getaLong(), expected.getaFloat(),
-        expected.getaDouble(), expected.isaBoolean(), expected.getaChar(),
-        expected.getaWrappedByte(), expected.getaWrappedShort(), expected.getaWrappedInteger(),
-        expected.getaWrappedLong(), expected.getaWrappedFloat(), expected.getaWrappedDouble(),
-        expected.getaWrappedBoolean(), expected.getaWrappedCharacter(),
+        expected.getAnByte(), expected.getAnShort(), expected.getAnInt(), expected.getAnLong(), expected.getAnFloat(),
+        expected.getAnDouble(), expected.isAnBoolean(), expected.getAnChar(),
+        expected.getAnWrappedByte(), expected.getAnWrappedShort(), expected.getAnWrappedInteger(),
+        expected.getAnWrappedLong(), expected.getAnWrappedFloat(), expected.getAnWrappedDouble(),
+        expected.getAnWrappedBoolean(), expected.getAnWrappedCharacter(),
         expected.getString(), expected.getColor()
     );
     Assert.assertEquals(expected, response);
 
     StringBuilder requestUriBuilder = new StringBuilder();
     requestUriBuilder.append("/testQueryObjectParam?")
-        .append("aByte=" + expected.getaByte()).append("&")
-        .append("aShort=" + expected.getaShort()).append("&")
+        .append("anByte=" + expected.getAnByte()).append("&")
+        .append("anShort=" + expected.getAnShort()).append("&")
         .append("anInt=" + expected.getAnInt()).append("&")
-        .append("aLong=" + expected.getaLong()).append("&")
-        .append("aFloat=" + expected.getaFloat()).append("&")
-        .append("aDouble=" + expected.getaDouble()).append("&")
-        .append("aBoolean=" + expected.isaBoolean()).append("&")
-        .append("aChar=" + expected.getaChar()).append("&")
-        .append("aWrappedByte=" + expected.getaWrappedByte()).append("&")
-        .append("aWrappedShort=" + expected.getaWrappedShort()).append("&")
-        .append("aWrappedInteger=" + expected.getaWrappedInteger()).append("&")
-        .append("aWrappedLong=" + expected.getaWrappedLong()).append("&")
-        .append("aWrappedFloat=" + expected.getaWrappedFloat()).append("&")
-        .append("aWrappedDouble=" + expected.getaWrappedDouble()).append("&")
-        .append("aWrappedBoolean=" + expected.getaWrappedBoolean()).append("&")
-        .append("aWrappedCharacter=" + expected.getaWrappedCharacter()).append("&")
+        .append("anLong=" + expected.getAnLong()).append("&")
+        .append("anFloat=" + expected.getAnFloat()).append("&")
+        .append("anDouble=" + expected.getAnDouble()).append("&")
+        .append("anBoolean=" + expected.isAnBoolean()).append("&")
+        .append("anChar=" + expected.getAnChar()).append("&")
+        .append("anWrappedByte=" + expected.getAnWrappedByte()).append("&")
+        .append("anWrappedShort=" + expected.getAnWrappedShort()).append("&")
+        .append("anWrappedInteger=" + expected.getAnWrappedInteger()).append("&")
+        .append("anWrappedLong=" + expected.getAnWrappedLong()).append("&")
+        .append("anWrappedFloat=" + expected.getAnWrappedFloat()).append("&")
+        .append("anWrappedDouble=" + expected.getAnWrappedDouble()).append("&")
+        .append("anWrappedBoolean=" + expected.getAnWrappedBoolean()).append("&")
+        .append("anWrappedCharacter=" + expected.getAnWrappedCharacter()).append("&")
         .append("string=" + expected.getString()).append("&")
         .append("color=" + expected.getColor());
     ResponseEntity<FlattenObjectRequest> responseEntity = consumers.getSCBRestTemplate()
@@ -348,16 +349,16 @@ public class TestSpringMVCObjectParamType {
     Assert.assertEquals(expected, responseEntity.getBody());
     Assert.assertEquals(200, responseEntity.getStatusCodeValue());
 
-    expected.setaWrappedBoolean(null);
+    expected.setAnWrappedBoolean(null);
     expected.setString(null);
     expected.setAnInt(0);
-    expected.setaWrappedInteger(null);
+    expected.setAnWrappedInteger(null);
     response = consumers.getIntf().testQueryObjectParam(
-        expected.getaByte(), expected.getaShort(), expected.getAnInt(), expected.getaLong(), expected.getaFloat(),
-        expected.getaDouble(), expected.isaBoolean(), expected.getaChar(),
-        expected.getaWrappedByte(), expected.getaWrappedShort(), expected.getaWrappedInteger(),
-        expected.getaWrappedLong(), expected.getaWrappedFloat(), expected.getaWrappedDouble(),
-        expected.getaWrappedBoolean(), expected.getaWrappedCharacter(),
+        expected.getAnByte(), expected.getAnShort(), expected.getAnInt(), expected.getAnLong(), expected.getAnFloat(),
+        expected.getAnDouble(), expected.isAnBoolean(), expected.getAnChar(),
+        expected.getAnWrappedByte(), expected.getAnWrappedShort(), expected.getAnWrappedInteger(),
+        expected.getAnWrappedLong(), expected.getAnWrappedFloat(), expected.getAnWrappedDouble(),
+        expected.getAnWrappedBoolean(), expected.getAnWrappedCharacter(),
         expected.getString(), expected.getColor()
     );
     Assert.assertEquals(expected, response);
@@ -365,22 +366,22 @@ public class TestSpringMVCObjectParamType {
 
   private FlattenObjectRequest createFlattenObjectRequest() {
     FlattenObjectRequest request = new FlattenObjectRequest();
-    request.setaByte((byte) 8);
-    request.setaShort((short) 7);
+    request.setAnByte((byte) 8);
+    request.setAnShort((short) 7);
     request.setAnInt(6);
-    request.setaLong(5);
-    request.setaFloat(4.4f);
-    request.setaDouble(3.3);
-    request.setaBoolean(true);
-    request.setaChar('c');
-    request.setaWrappedByte((byte) 16);
-    request.setaWrappedShort((short) 15);
-    request.setaWrappedInteger(14);
-    request.setaWrappedLong(13L);
-    request.setaWrappedFloat(12.2f);
-    request.setaWrappedDouble(11.1);
-    request.setaWrappedBoolean(true);
-    request.setaWrappedCharacter('d');
+    request.setAnLong(5);
+    request.setAnFloat(4.4f);
+    request.setAnDouble(3.3);
+    request.setAnBoolean(true);
+    request.setAnChar('c');
+    request.setAnWrappedByte((byte) 16);
+    request.setAnWrappedShort((short) 15);
+    request.setAnWrappedInteger(14);
+    request.setAnWrappedLong(13L);
+    request.setAnWrappedFloat(12.2f);
+    request.setAnWrappedDouble(11.1);
+    request.setAnWrappedBoolean(true);
+    request.setAnWrappedCharacter('d');
     request.setString("abc");
     request.setColor(Color.BLUE);
     return request;
diff --git a/integration-tests/it-edge/src/main/resources/microservice.yaml b/integration-tests/it-edge/src/main/resources/microservice.yaml
index ec4c310..2ce4708 100644
--- a/integration-tests/it-edge/src/main/resources/microservice.yaml
+++ b/integration-tests/it-edge/src/main/resources/microservice.yaml
@@ -50,6 +50,8 @@ servicecomb:
       org.apache.servicecomb.it.schema.RestControllerSchema:
         restControllerSchemaQueries:
           transport: rest
+      paramCodecRestOnly:
+        transport: rest
     it-producer-h2:
       generic:
         genericUser:
@@ -67,6 +69,8 @@ servicecomb:
       org.apache.servicecomb.it.schema.RestControllerSchema:
         restControllerSchemaQueries:
           transport: rest
+      paramCodecRestOnly:
+        transport: rest
     it-producer-h2c:
       generic:
         genericUser:
@@ -84,6 +88,8 @@ servicecomb:
       org.apache.servicecomb.it.schema.RestControllerSchema:
         restControllerSchemaQueries:
           transport: rest
+      paramCodecRestOnly:
+        transport: rest
     it-producer-deploy-springboot2-servlet:
       generic:
         genericUser:
@@ -101,6 +107,8 @@ servicecomb:
       org.apache.servicecomb.it.schema.RestControllerSchema:
         restControllerSchemaQueries:
           transport: rest
+      paramCodecRestOnly:
+        transport: rest
     it-producer-deploy-springboot2-standalone:
       generic:
         genericUser:
@@ -118,6 +126,8 @@ servicecomb:
       org.apache.servicecomb.it.schema.RestControllerSchema:
         restControllerSchemaQueries:
           transport: rest
+      paramCodecRestOnly:
+        transport: rest
   http:
     dispatcher:
       edge:
@@ -140,6 +150,7 @@ servicecomb:
               microserviceName: business
               versionRule: 2.0.0-3.0.0
   request:
+    timeout: 5000
     it-producer:
       edgeExceptionConvertSchema:
         timeout: 30000
diff --git a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/ParamCodecSchema.java b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/ParamCodecSchema.java
index 267e471..0cd2f99 100644
--- a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/ParamCodecSchema.java
+++ b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/ParamCodecSchema.java
@@ -27,7 +27,6 @@ import javax.ws.rs.PathParam;
 import javax.ws.rs.QueryParam;
 import javax.ws.rs.core.MediaType;
 
-import org.apache.servicecomb.foundation.test.scaffolding.model.Media;
 import org.apache.servicecomb.provider.rest.common.RestSchema;
 import org.apache.servicecomb.swagger.invocation.context.ContextUtils;
 
@@ -51,15 +50,6 @@ public class ParamCodecSchema {
     return result.equals(expected1) || result.equals(expected2);
   }
 
-  /**
-   * Test special enum name tagged by {@link com.fasterxml.jackson.annotation.JsonProperty}
-   */
-  @Path("enum/enumSpecialName")
-  @POST
-  public Media enumSpecialName(Media media) {
-    return media;
-  }
-
   @Path("invocationContext")
   @GET
   public Map<String, String> getInvocationContext() {
diff --git a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/BoolGetter.java b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/ParamCodecSchemaRestOnly.java
similarity index 57%
rename from foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/BoolGetter.java
rename to integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/ParamCodecSchemaRestOnly.java
index 11e0a3c..9e4db24 100644
--- a/foundations/foundation-common/src/main/java/org/apache/servicecomb/foundation/common/utils/bean/BoolGetter.java
+++ b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/ParamCodecSchemaRestOnly.java
@@ -14,8 +14,25 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.servicecomb.foundation.common.utils.bean;
 
-public interface BoolGetter<T> {
-  boolean get(T instance);
+package org.apache.servicecomb.it.schema;
+
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+
+import org.apache.servicecomb.foundation.test.scaffolding.model.Media;
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+
+@RestSchema(schemaId = "paramCodecRestOnly")
+@Path("/v1/paramCodecRestOnly")
+public class ParamCodecSchemaRestOnly {
+  /**
+   * Test special enum name tagged by {@link com.fasterxml.jackson.annotation.JsonProperty}.
+   * Special name not supported by ProtoBuffer
+   */
+  @Path("enum/enumSpecialName")
+  @POST
+  public Media enumSpecialName(Media media) {
+    return media;
+  }
 }
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 30cadb1..7aacd1a 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -95,13 +95,10 @@
       <groupId>org.apache.servicecomb</groupId>
       <artifactId>transport-rest-vertx</artifactId>
     </dependency>
-    <!-- TODO : WEAK recover highway integration tests -->
-    <!--
     <dependency>
       <groupId>org.apache.servicecomb</groupId>
       <artifactId>transport-highway</artifactId>
     </dependency>
-    -->
     <dependency>
       <groupId>org.apache.servicecomb</groupId>
       <artifactId>provider-springmvc</artifactId>