[ 
https://issues.apache.org/jira/browse/SCB-882?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16606594#comment-16606594
 ] 

ASF GitHub Bot commented on SCB-882:
------------------------------------

liubao68 closed pull request #893: [SCB-882] Split mixed it case
URL: https://github.com/apache/incubator-servicecomb-java-chassis/pull/893
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git 
a/core/src/main/java/org/apache/servicecomb/core/unittest/UnitTestMeta.java 
b/core/src/main/java/org/apache/servicecomb/core/unittest/UnitTestMeta.java
index a7a9028e5..53bde6af8 100644
--- a/core/src/main/java/org/apache/servicecomb/core/unittest/UnitTestMeta.java
+++ b/core/src/main/java/org/apache/servicecomb/core/unittest/UnitTestMeta.java
@@ -133,7 +133,6 @@ public SchemaMeta getOrCreateSchemaMeta(Class<?> impl) {
   }
 
   public SchemaMeta getOrCreateSchemaMeta(String appId, String 
microserviceName, String schemaId, Class<?> impl) {
-    String longName = appId + ":" + microserviceName;
     MicroserviceMeta microserviceMeta = 
SCBEngine.getInstance().getProducerMicroserviceMeta();
     SchemaMeta schemaMeta = microserviceMeta.findSchemaMeta(schemaId);
     if (schemaMeta != null) {
diff --git 
a/demo/demo-edge/consumer/src/main/java/org/apache/servicecomb/demo/edge/consumer/Consumer.java
 
b/demo/demo-edge/consumer/src/main/java/org/apache/servicecomb/demo/edge/consumer/Consumer.java
index 95ea17a32..7117f0761 100644
--- 
a/demo/demo-edge/consumer/src/main/java/org/apache/servicecomb/demo/edge/consumer/Consumer.java
+++ 
b/demo/demo-edge/consumer/src/main/java/org/apache/servicecomb/demo/edge/consumer/Consumer.java
@@ -161,7 +161,7 @@ protected void testRecursiveSelf() {
     Assert.isNull(response.getField().getField(), "must be null");
   }
 
-  @SuppressWarnings({"unckecked", "rawtypes"})
+  @SuppressWarnings({"rawtypes"})
   protected void testErrorCode() {
     String url = edgePrefix + "/v2/error/add";
 
diff --git 
a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/CustomLoadbalanceExtensionsFactory.java
 
b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/CustomLoadbalanceExtensionsFactory.java
index c015165be..5b2c0ec19 100644
--- 
a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/CustomLoadbalanceExtensionsFactory.java
+++ 
b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/CustomLoadbalanceExtensionsFactory.java
@@ -25,8 +25,6 @@
 import com.netflix.client.DefaultLoadBalancerRetryHandler;
 import com.netflix.client.RetryHandler;
 import com.netflix.client.Utils;
-import com.netflix.loadbalancer.IRule;
-import com.netflix.loadbalancer.RoundRobinRule;
 
 @Component
 public class CustomLoadbalanceExtensionsFactory implements ExtensionsFactory {
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 f28ffbd8b..3ac8e8405 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
@@ -287,7 +287,7 @@ private static void testRawJsonParam(RestTemplate template, 
String cseUrlPrefix)
         template.postForObject(cseUrlPrefix + "/compute/testrawjson", 
jsonPerson, String.class));
   }
 
-  @SuppressWarnings({"unckecked", "rawtypes"})
+  @SuppressWarnings({"rawtypes"})
   private static void testValidatorAddFail(RestTemplate template, String 
cseUrlPrefix) {
     Map<String, String> params = new HashMap<>();
     params.put("a", "5");
@@ -320,7 +320,7 @@ private static void testValidatorAddSuccess(RestTemplate 
template, String cseUrl
     TestMgr.check(25, result);
   }
 
-  @SuppressWarnings({"unckecked", "rawtypes"})
+  @SuppressWarnings({"rawtypes"})
   private static void testValidatorSayHiFail(RestTemplate template, String 
cseUrlPrefix) {
     boolean isExcep = false;
     try {
@@ -346,7 +346,7 @@ private static void testValidatorSayHiSuccess(RestTemplate 
template, String cseU
     TestMgr.check("world sayhi", responseEntity.getBody());
   }
 
-  @SuppressWarnings({"unckecked", "rawtypes"})
+  @SuppressWarnings({"rawtypes"})
   private static void testValidatorExchangeFail(RestTemplate template, String 
cseUrlPrefix) {
     HttpHeaders headers = new HttpHeaders();
     headers.add("Accept", MediaType.APPLICATION_JSON);
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 24d90cbad..28e30c5a3 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
@@ -197,10 +197,12 @@ private static void testNoClientErrorCode() {
     requestJson.put("code", 200);
     requestJson.put("message", "test message");
 
+    @SuppressWarnings("rawtypes")
     ResponseEntity<List> listResult = template
         .postForEntity(SERVER + "/MultiErrorCodeService/noClientErrorCode", 
requestJson, List.class);
     TestMgr.check(listResult.getStatusCode(), 200);
-    Map mapResult = 
RestObjectMapperFactory.getRestObjectMapper().convertValue(listResult.getBody().get(0),
 Map.class);
+    Map<?, ?> mapResult =
+        
RestObjectMapperFactory.getRestObjectMapper().convertValue(listResult.getBody().get(0),
 Map.class);
     TestMgr.check(mapResult.get("message"), "test message");
     TestMgr.check(mapResult.get("code"), 200);
     TestMgr.check(mapResult.get("t200"), 200);
diff --git 
a/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/multiErrorCode/MultiErrorCodeService.java
 
b/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/multiErrorCode/MultiErrorCodeService.java
index eb0c2f408..5535c53b6 100644
--- 
a/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/multiErrorCode/MultiErrorCodeService.java
+++ 
b/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/multiErrorCode/MultiErrorCodeService.java
@@ -148,7 +148,6 @@ public Response errorCodeWithHeader(MultiRequest request) {
   @ApiResponses({
       @ApiResponse(code = 400, response = NoClientErrorCode400.class, message 
= "")})
   public List<NoClientErrorCode200> noClientErrorCode(MultiRequest request) {
-    javax.ws.rs.core.Response response;
     if (request.getCode() == 400) {
       NoClientErrorCode400 r = new NoClientErrorCode400();
       r.setCode(request.getCode());
diff --git 
a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/RestObjectMapperWithStringMapperNotWriteNull.java
 
b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/RestObjectMapperWithStringMapperNotWriteNull.java
index 9eacb22bb..38329e1f6 100644
--- 
a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/RestObjectMapperWithStringMapperNotWriteNull.java
+++ 
b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/RestObjectMapperWithStringMapperNotWriteNull.java
@@ -17,9 +17,6 @@
 
 package org.apache.servicecomb.demo;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
 
 /**
@@ -42,8 +39,6 @@
 public class RestObjectMapperWithStringMapperNotWriteNull extends 
RestObjectMapperWithStringMapper {
   private static final long serialVersionUID = 4279371572149490560L;
 
-  private static Logger LOGGER = 
LoggerFactory.getLogger(RestObjectMapperWithStringMapper.class);
-
   public RestObjectMapperWithStringMapperNotWriteNull() {
     super();
     setSerializationInclusion(Include.NON_NULL);
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 2a41e0afe..1da2e7c69 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
@@ -291,8 +291,8 @@ private static void testSpringMvcDefaultValues(RestTemplate 
template, String mic
     //default values
     HttpHeaders headers = new HttpHeaders();
     headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-    MultiValueMap<String, String> map = new LinkedMultiValueMap<String, 
String>();
-    HttpEntity<MultiValueMap<String, String>> request = new 
HttpEntity<MultiValueMap<String, String>>(map, headers);
+    MultiValueMap<String, String> map = new LinkedMultiValueMap<>();
+    HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, 
headers);
     String result = template.postForObject(cseUrlPrefix + "/form", request, 
String.class);
     TestMgr.check("Hello 20bobo", result);
 
diff --git 
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestResponse.java
 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestResponse.java
index 95db734ed..9bbc4fcc1 100644
--- 
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestResponse.java
+++ 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestResponse.java
@@ -19,7 +19,6 @@
 import java.util.Date;
 import java.util.Objects;
 
-import org.apache.servicecomb.core.exception.CseException;
 import org.apache.servicecomb.demo.TestMgr;
 import org.apache.servicecomb.demo.compute.GenericParam;
 import org.apache.servicecomb.demo.compute.Person;
diff --git 
a/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/client/TestConfigCenterClient.java
 
b/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/client/TestConfigCenterClient.java
index f672d9e86..5c70ac4a2 100644
--- 
a/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/client/TestConfigCenterClient.java
+++ 
b/dynamic-config/config-cc/src/test/java/org/apache/servicecomb/config/client/TestConfigCenterClient.java
@@ -113,7 +113,6 @@ public void testConnectRefreshModeTwo() {
     Assert.assertFalse(status);
   }
 
-  @SuppressWarnings("unchecked")
   @Test
   public void testConfigRefreshModeOne(@Mocked 
ClientPoolManager<HttpClientWithContext> clientMgr,
       @Mocked HttpClientWithContext httpClientWithContext) {
diff --git 
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ExtensionsFactory.java
 
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ExtensionsFactory.java
index 9077575ee..ce3dca449 100644
--- 
a/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ExtensionsFactory.java
+++ 
b/handlers/handler-loadbalance/src/main/java/org/apache/servicecomb/loadbalance/ExtensionsFactory.java
@@ -17,7 +17,6 @@
 package org.apache.servicecomb.loadbalance;
 
 import com.netflix.client.RetryHandler;
-import com.netflix.loadbalancer.IRule;
 
 /**
  * By implements ExtensionsFactory, users can add new extends for rules, 
filters, etc.
diff --git 
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/MyServerListFilterExt.java
 
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/MyServerListFilterExt.java
index 6f93b44c7..a8a0ce96f 100644
--- 
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/MyServerListFilterExt.java
+++ 
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/MyServerListFilterExt.java
@@ -22,8 +22,6 @@
 
 import org.apache.servicecomb.core.Invocation;
 
-import com.netflix.loadbalancer.Server;
-
 /**
  * @author l00168639
  *
diff --git 
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestConfiguration.java
 
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestConfiguration.java
index 6ef2160a8..01dd6bcf9 100644
--- 
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestConfiguration.java
+++ 
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestConfiguration.java
@@ -19,7 +19,6 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 
 import org.junit.Test;
 
diff --git 
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestExtensionsManager.java
 
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestExtensionsManager.java
index 169e91a79..3b1faacc8 100644
--- 
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestExtensionsManager.java
+++ 
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestExtensionsManager.java
@@ -32,9 +32,6 @@
 
 import com.netflix.client.DefaultLoadBalancerRetryHandler;
 import com.netflix.client.RetryHandler;
-import com.netflix.loadbalancer.RandomRule;
-import com.netflix.loadbalancer.RoundRobinRule;
-import com.netflix.loadbalancer.WeightedResponseTimeRule;
 
 import mockit.Deencapsulation;
 
diff --git 
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadbalanceHandler.java
 
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadbalanceHandler.java
index eedf60c6f..f7e263549 100644
--- 
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadbalanceHandler.java
+++ 
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestLoadbalanceHandler.java
@@ -20,7 +20,6 @@
 import java.net.SocketException;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ExecutionException;
@@ -33,7 +32,6 @@
 import org.apache.servicecomb.core.Invocation;
 import org.apache.servicecomb.core.Transport;
 import org.apache.servicecomb.core.transport.TransportManager;
-import org.apache.servicecomb.foundation.common.cache.VersionedCache;
 import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
 import org.apache.servicecomb.foundation.test.scaffolding.config.ArchaiusUtils;
 import org.apache.servicecomb.serviceregistry.RegistryUtils;
diff --git 
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestSessionSticknessRule.java
 
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestSessionSticknessRule.java
index 303735c96..228e973e0 100644
--- 
a/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestSessionSticknessRule.java
+++ 
b/handlers/handler-loadbalance/src/test/java/org/apache/servicecomb/loadbalance/TestSessionSticknessRule.java
@@ -75,8 +75,6 @@ public void testServerWithoutTimeoutAndWithThreshold() {
 
     SessionStickinessRule ss = new SessionStickinessRule();
 
-    Object key = new Object();
-
     Invocation invocation = mock(Invocation.class);
     ServiceCombServer server = mock(ServiceCombServer.class);
     List<ServiceCombServer> servers = new ArrayList<>();
@@ -146,8 +144,6 @@ public void testServerWithoutTimeoutException() {
 
     SessionStickinessRule ss = new SessionStickinessRule();
 
-    Object key = new Object();
-
     Invocation invocation = mock(Invocation.class);
     ServiceCombServer server = mock(ServiceCombServer.class);
     List<ServiceCombServer> servers = new ArrayList<>();
@@ -178,8 +174,6 @@ public void testServerWithoutTimeoutAndThreshold() {
 
     SessionStickinessRule ss = new SessionStickinessRule();
 
-    Object key = new Object();
-
     Invocation invocation = mock(Invocation.class);
     ServiceCombServer server = mock(ServiceCombServer.class);
     List<ServiceCombServer> servers = new ArrayList<>();
@@ -225,8 +219,6 @@ public void testServerWithActualServerObj() {
     boolean status = true;
     SessionStickinessRule ss = new SessionStickinessRule();
 
-    Object key = new Object();
-
     Invocation invocation = mock(Invocation.class);
     ServiceCombServer server = mock(ServiceCombServer.class);
     List<ServiceCombServer> servers = new ArrayList<>();
@@ -272,7 +264,6 @@ private boolean isErrorThresholdMet() {
         return false;
       }
     };
-    Object key = Mockito.mock(Object.class);
     Server s = rule.choose(allServers, invocation);
     Assert.assertEquals(mockedServer, s);
   }
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 32f1764d4..023a71993 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
@@ -16,29 +16,23 @@
  */
 package org.apache.servicecomb.it;
 
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.servicecomb.core.Const;
 import org.apache.servicecomb.core.SCBEngine;
 import org.apache.servicecomb.foundation.common.utils.BeanUtils;
 import org.apache.servicecomb.it.deploy.Deploys;
 import org.apache.servicecomb.it.junit.ITJUnitUtils;
+import org.apache.servicecomb.it.testcase.TestChangeTransport;
+import org.apache.servicecomb.it.testcase.TestDataTypePrimitive;
+import org.apache.servicecomb.it.testcase.TestDefaultValue;
+import org.apache.servicecomb.it.testcase.TestIgnoreMethod;
+import org.apache.servicecomb.it.testcase.TestParamCodec;
 import org.apache.servicecomb.it.testcase.TestTrace;
 import org.apache.servicecomb.it.testcase.TestTraceEdge;
-import org.apache.servicecomb.it.testcase.base.TestDataTypeJaxrs;
-import org.apache.servicecomb.it.testcase.base.TestDataTypePojo;
-import org.apache.servicecomb.it.testcase.base.TestDataTypeSpringmvc;
-import org.apache.servicecomb.it.testcase.base.TestParamCodec;
-import org.apache.servicecomb.it.testcase.support.ProducerDevMode;
 
 public class ConsumerMain {
   private static ResultPrinter resultPrinter = new ResultPrinter();
 
   private static Deploys deploys = new Deploys();
 
-  private static List<String> transports;
-
   public static boolean autoExit = true;
 
   public static void main(String[] args) throws Throwable {
@@ -66,6 +60,8 @@ protected static void run() throws Throwable {
     deploys.getEdge().ensureReady();
     // deploys.getZuul().ensureReady(zuul);
 
+    ITJUnitUtils.run(TestIgnoreMethod.class);
+
     // 1.base test case
     //   include all extension point abnormal scenes test case
 
@@ -75,10 +71,8 @@ protected static void run() throws Throwable {
     //   run rest
     //   run native restTemplate to edge/zuul
     // stop standalone base-producer
-    transports = Arrays.asList(Const.HIGHWAY, Const.RESTFUL);
     testStandalone();
 
-    transports = Arrays.asList(Const.RESTFUL);
     // deploy tomcat base-producer
     //   run vertx-servlet
     //   run native restTemplate to edge/zuul
@@ -106,39 +100,18 @@ private static void testStandalone() throws Throwable {
     deploys.getBaseProducer().ensureReady();
     ITJUnitUtils.addParent("standalone");
 
-    testDataType();
+    ITJUnitUtils.runWithHighwayAndRest(TestChangeTransport.class);
+    ITJUnitUtils.runWithHighwayAndRest(TestDataTypePrimitive.class);
+
+    // only rest support default value feature
+    ITJUnitUtils.runWithRest(TestDefaultValue.class);
+
     ITJUnitUtils.runWithHighwayAndRest(TestTrace.class);
     ITJUnitUtils.run(TestTraceEdge.class);
+
     ITJUnitUtils.runWithHighwayAndRest(TestParamCodec.class);
 
     ITJUnitUtils.getParents().pop();
     deploys.getBaseProducer().stop();
   }
-
-  private static void testDataType() {
-    testDataType(ProducerDevMode.Pojo, TestDataTypePojo.class);
-    testDataType(ProducerDevMode.Jaxrs, TestDataTypeJaxrs.class);
-    testDataType(ProducerDevMode.Springmvc, TestDataTypeSpringmvc.class);
-
-    ITJUnitUtils.getParents().push("edge");
-//    runEdge();
-    ITJUnitUtils.getParents().pop();
-
-    ITJUnitUtils.getParents().push("zuul");
-//    runEdge();
-    ITJUnitUtils.getParents().pop();
-  }
-
-  private static void testDataType(ProducerDevMode producerDevMode, 
Class<?>... classes) {
-    ITJUnitUtils.addParent(producerDevMode.name());
-    for (String transport : transports) {
-      ITJUnitUtils.addParent(transport);
-
-      ITUtils.invokeExactStaticMethod(classes, "init", transport, 
producerDevMode);
-      ITJUnitUtils.run(classes);
-
-      ITJUnitUtils.getParents().pop();
-    }
-    ITJUnitUtils.getParents().pop();
-  }
 }
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/support/DataTypeRestIntf.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/schema/IgnoreMethodJaxrsSchema.java
similarity index 53%
rename from 
integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/support/DataTypeRestIntf.java
rename to 
integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/schema/IgnoreMethodJaxrsSchema.java
index a1dcd3a9c..b3318a57c 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/support/DataTypeRestIntf.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/schema/IgnoreMethodJaxrsSchema.java
@@ -1,4 +1,4 @@
-package org.apache.servicecomb.it.testcase.support;/*
+/*
  * 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.
@@ -14,43 +14,22 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.servicecomb.it.schema;
 
-public interface DataTypeRestIntf {
-  String checkTransport();
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
 
-  int intPath(int input);
+import org.apache.servicecomb.provider.rest.common.RestSchema;
 
-  int intQuery(int input);
+import io.swagger.annotations.ApiOperation;
 
-  int intHeader(int input);
-
-  int intCookie(int input);
-
-  int intBody(int input);
-
-  int intForm(int a);
-
-  int intAttribute(int a);
-
-  int intAdd(int a, int b);
-
-  int intPostAdd(int a, int b);
-
-  int defaultPath();
-
-  int intPathWithMinMax(int input);
-
-  int intQueryWithMinMax(int input);
-
-  int intHeaderWithMinMax(int input);
-
-  int intCookieWithMinMax(int input);
-
-  int intFormWithMinMax(int input);
-
-  int intAttributeWithMinMax(int input);
-
-  int intBodyWithMinMax(int input);
-
-  String intMulti(int a, int b, int c, int d, int e);
+@RestSchema(schemaId = "ignoreMethodJaxrs")
+@Path("/v1/ignoreMethodJaxrs")
+public class IgnoreMethodJaxrsSchema {
+  @ApiOperation(value = "", hidden = true)
+  @GET
+  @Path("hideByApiOperation")
+  public int hideByApiOperation() {
+    return 0;
+  }
 }
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/support/ProducerDevMode.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/schema/IgnoreMethodPojoSchema.java
similarity index 64%
rename from 
integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/support/ProducerDevMode.java
rename to 
integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/schema/IgnoreMethodPojoSchema.java
index c2642935a..9b3ae4e9e 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/support/ProducerDevMode.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/schema/IgnoreMethodPojoSchema.java
@@ -1,4 +1,4 @@
-package org.apache.servicecomb.it.testcase.support;/*
+/*
  * 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.
@@ -14,9 +14,18 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.servicecomb.it.schema;
 
-public enum ProducerDevMode {
-  Pojo,
-  Jaxrs,
-  Springmvc
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.SwaggerDefinition;
+
+@RestSchema(schemaId = "ignoreMethodPojo")
+@SwaggerDefinition(basePath = "/v1/ignoreMethodPojo")
+public class IgnoreMethodPojoSchema {
+  @ApiOperation(value = "", hidden = true)
+  public int hideByApiOperation() {
+    return 0;
+  }
 }
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/schema/IgnoreMethodSpringmvcSchema.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/schema/IgnoreMethodSpringmvcSchema.java
new file mode 100644
index 000000000..71c5517ac
--- /dev/null
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/schema/IgnoreMethodSpringmvcSchema.java
@@ -0,0 +1,33 @@
+/*
+ * 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.it.schema;
+
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import io.swagger.annotations.ApiOperation;
+
+@RestSchema(schemaId = "ignoreMethodSpringmvc")
+@RequestMapping(path = "/v1/ignoreMethodSpringmvc")
+public class IgnoreMethodSpringmvcSchema {
+  @ApiOperation(value = "", hidden = true)
+  @GetMapping(path = "")
+  public int hideByApiOperation() {
+    return 0;
+  }
+}
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestChangeTransport.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestChangeTransport.java
new file mode 100644
index 000000000..0153ea6ee
--- /dev/null
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestChangeTransport.java
@@ -0,0 +1,83 @@
+/*
+ * 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.it.testcase;
+
+import org.apache.servicecomb.it.Consumers;
+import org.apache.servicecomb.it.junit.ITJUnitUtils;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class TestChangeTransport {
+  interface ChangeTranportIntf {
+    String checkTransport();
+  }
+
+  static Consumers<ChangeTranportIntf> consumersPojo = new 
Consumers<>("transportPojo", ChangeTranportIntf.class);
+
+  static Consumers<ChangeTranportIntf> consumersJaxrs = new 
Consumers<>("transportJaxrs", ChangeTranportIntf.class);
+
+  static Consumers<ChangeTranportIntf> consumersSpringmvc = new 
Consumers<>("transportSpringmvc",
+      ChangeTranportIntf.class);
+
+  @BeforeClass
+  public static void classSetup() {
+    consumersPojo.init(ITJUnitUtils.getTransport());
+    consumersJaxrs.init(ITJUnitUtils.getTransport());
+    consumersSpringmvc.init(ITJUnitUtils.getTransport());
+  }
+
+  void checkTransport_intf(Consumers<ChangeTranportIntf> consumers) {
+    Assert.assertEquals(consumers.getTransport(), 
consumers.getIntf().checkTransport());
+  }
+
+  void checkTransport_rt(Consumers<ChangeTranportIntf> consumers) {
+    Assert.assertEquals(consumers.getTransport(),
+        consumers.getSCBRestTemplate().getForObject("/checkTransport", 
String.class));
+  }
+
+  @Test
+  public void checkTransport_pojo_intf() {
+    checkTransport_intf(consumersPojo);
+  }
+
+  @Test
+  public void checkTransport_pojo_rt() {
+    Assert.assertEquals(consumersPojo.getTransport(),
+        consumersPojo.getSCBRestTemplate().postForObject("/checkTransport", 
"", String.class));
+  }
+
+  @Test
+  public void checkTransport_jaxrs_intf() {
+    checkTransport_intf(consumersJaxrs);
+  }
+
+  @Test
+  public void checkTransport_jaxrs_rt() {
+    checkTransport_rt(consumersJaxrs);
+  }
+
+  @Test
+  public void checkTransport_springmvc_intf() {
+    checkTransport_intf(consumersSpringmvc);
+  }
+
+  @Test
+  public void checkTransport_springmvc_rt() {
+    checkTransport_rt(consumersSpringmvc);
+  }
+}
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDataTypePrimitive.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDataTypePrimitive.java
new file mode 100644
index 000000000..c19cc4a76
--- /dev/null
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDataTypePrimitive.java
@@ -0,0 +1,273 @@
+/*
+ * 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.it.testcase;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.servicecomb.it.Consumers;
+import org.apache.servicecomb.it.junit.ITJUnitUtils;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+
+public class TestDataTypePrimitive {
+  interface DataTypePojoIntf {
+    int intBody(int input);
+
+    int add(int a, int b);
+  }
+
+  public interface DataTypeRestIntf {
+    int intPath(int input);
+
+    int intQuery(int input);
+
+    int intHeader(int input);
+
+    int intCookie(int input);
+
+    int intBody(int input);
+
+    int intForm(int input);
+
+    int add(int a, int b);
+  }
+
+  private static Consumers<DataTypePojoIntf> consumersPojo = new 
Consumers<>("dataTypePojo", DataTypePojoIntf.class);
+
+  private static Consumers<DataTypeRestIntf> consumersJaxrs = new 
Consumers<>("dataTypeJaxrs", DataTypeRestIntf.class);
+
+  private static Consumers<DataTypeRestIntf> consumersSpringmvc = new 
Consumers<>("dataTypeSpringmvc",
+      DataTypeRestIntf.class);
+
+  @BeforeClass
+  public static void classSetup() {
+    consumersPojo.init(ITJUnitUtils.getTransport());
+    consumersJaxrs.init(ITJUnitUtils.getTransport());
+    consumersSpringmvc.init(ITJUnitUtils.getTransport());
+  }
+
+  @Test
+  public void int_pojo_intf() {
+    assertEquals(10, consumersPojo.getIntf().intBody(10));
+  }
+
+  @Test
+  public void int_pojo_rt() {
+    Map<String, Integer> map = new HashMap<>();
+    map.put("input", 10);
+
+    assertEquals(10, (int) 
consumersPojo.getSCBRestTemplate().postForObject("/intBody", map, int.class));
+  }
+
+  @Test
+  public void add_pojo_intf() {
+    assertEquals(12, consumersPojo.getIntf().add(10, 2));
+  }
+
+  @Test
+  public void add_pojo_rt() {
+    Map<String, Integer> map = new HashMap<>();
+    map.put("a", 10);
+    map.put("b", 2);
+    assertEquals(12, (int) 
consumersPojo.getSCBRestTemplate().postForObject("/add", map, int.class));
+  }
+
+  @Test
+  public void intPath_jaxrs_intf() {
+    assertEquals(10, consumersJaxrs.getIntf().intPath(10));
+  }
+
+  @Test
+  public void intPath_jaxrs_rt() {
+    assertEquals(10, (int) 
consumersJaxrs.getSCBRestTemplate().getForObject("/intPath/10", int.class));
+  }
+
+  @Test
+  public void intQuery_jaxrs_intf() {
+    assertEquals(10, consumersJaxrs.getIntf().intQuery(10));
+  }
+
+  @Test
+  public void intQuery_jaxrs_rt() {
+    assertEquals(10, (int) 
consumersJaxrs.getSCBRestTemplate().getForObject("/intQuery?input=10", 
int.class));
+  }
+
+  @Test
+  public void intHeader_jaxrs_intf() {
+    assertEquals(10, consumersJaxrs.getIntf().intHeader(10));
+  }
+
+  @Test
+  public void intHeader_jaxrs_rt() {
+    intHeader_rt(consumersJaxrs);
+  }
+
+  protected void intHeader_rt(Consumers<DataTypeRestIntf> consumers) {
+    HttpHeaders headers = new HttpHeaders();
+    headers.add("input", "10");
+
+    @SuppressWarnings("rawtypes")
+    HttpEntity entity = new HttpEntity<>(null, headers);
+    ResponseEntity<Integer> response = consumers.getSCBRestTemplate()
+        .exchange("/intHeader",
+            HttpMethod.GET,
+            entity,
+            int.class);
+    assertEquals(10, (int) response.getBody());
+  }
+
+  @Test
+  public void intCookie_jaxrs_intf() {
+    assertEquals(10, consumersJaxrs.getIntf().intCookie(10));
+  }
+
+  @Test
+  public void intCookie_jaxrs_rt() {
+    intCookie_rt(consumersJaxrs);
+  }
+
+  void intCookie_rt(Consumers<DataTypeRestIntf> consumers) {
+    HttpHeaders headers = new HttpHeaders();
+    headers.add("Cookie", "input=10");
+
+    @SuppressWarnings("rawtypes")
+    HttpEntity entity = new HttpEntity<>(null, headers);
+    ResponseEntity<Integer> response = consumers.getSCBRestTemplate()
+        .exchange("/intCookie",
+            HttpMethod.GET,
+            entity,
+            int.class);
+    assertEquals(10, (int) response.getBody());
+  }
+
+  @Test
+  public void intForm_jaxrs_intf() {
+    assertEquals(10, consumersJaxrs.getIntf().intForm(10));
+  }
+
+  @Test
+  public void intForm_jaxrs_rt() {
+    Map<String, Integer> map = new HashMap<>();
+    map.put("input", 10);
+    HttpEntity<Map<String, Integer>> formEntiry = new HttpEntity<>(map);
+
+    assertEquals(10,
+        (int) consumersJaxrs.getSCBRestTemplate().postForEntity("/intForm", 
formEntiry, int.class).getBody());
+  }
+
+  @Test
+  public void intBody_jaxrs_intf() {
+    assertEquals(10, consumersJaxrs.getIntf().intBody(10));
+  }
+
+  @Test
+  public void intBody_jaxrs_rt() {
+    assertEquals(10, (int) 
consumersJaxrs.getSCBRestTemplate().postForObject("/intBody", 10, int.class));
+  }
+
+  @Test
+  public void add_jaxrs_intf() {
+    assertEquals(12, consumersJaxrs.getIntf().add(10, 2));
+  }
+
+  @Test
+  public void add_jaxrs_rt() {
+    assertEquals(12, (int) 
consumersJaxrs.getSCBRestTemplate().getForObject("/add?a=10&b=2", int.class));
+  }
+
+  @Test
+  public void intPath_springmvc_intf() {
+    assertEquals(10, consumersSpringmvc.getIntf().intPath(10));
+  }
+
+  @Test
+  public void intPath_springmvc_rt() {
+    assertEquals(10, (int) 
consumersSpringmvc.getSCBRestTemplate().getForObject("/intPath/10", int.class));
+  }
+
+  @Test
+  public void intQuery_springmvc_intf() {
+    assertEquals(10, consumersSpringmvc.getIntf().intQuery(10));
+  }
+
+  @Test
+  public void intQuery_springmvc_rt() {
+    assertEquals(10, (int) 
consumersSpringmvc.getSCBRestTemplate().getForObject("/intQuery?input=10", 
int.class));
+  }
+
+  @Test
+  public void intHeader_springmvc_intf() {
+    assertEquals(10, consumersSpringmvc.getIntf().intHeader(10));
+  }
+
+  @Test
+  public void intHeader_springmvc_rt() {
+    intHeader_rt(consumersSpringmvc);
+  }
+
+  @Test
+  public void intCookie_springmvc_intf() {
+    assertEquals(10, consumersSpringmvc.getIntf().intCookie(10));
+  }
+
+  @Test
+  public void intCookie_springmvc_rt() {
+    intCookie_rt(consumersSpringmvc);
+  }
+
+  @Test
+  public void intForm_springmvc_intf() {
+    assertEquals(10, consumersSpringmvc.getIntf().intForm(10));
+  }
+
+  @Test
+  public void intForm_springmvc_rt() {
+    Map<String, Integer> map = new HashMap<>();
+    map.put("input", 10);
+    HttpEntity<Map<String, Integer>> formEntiry = new HttpEntity<>(map);
+
+    assertEquals(10,
+        (int) 
consumersSpringmvc.getSCBRestTemplate().postForEntity("/intForm", formEntiry, 
int.class).getBody());
+  }
+
+  @Test
+  public void intBody_springmvc_intf() {
+    assertEquals(10, consumersSpringmvc.getIntf().intBody(10));
+  }
+
+  @Test
+  public void intBody_springmvc_rt() {
+    assertEquals(10, (int) 
consumersSpringmvc.getSCBRestTemplate().postForObject("/intBody", 10, 
int.class));
+  }
+
+  @Test
+  public void add_springmvc_intf() {
+    assertEquals(12, consumersSpringmvc.getIntf().add(10, 2));
+  }
+
+  @Test
+  public void add_springmvc_rt() {
+    assertEquals(12, (int) 
consumersSpringmvc.getSCBRestTemplate().getForObject("/add?a=10&b=2", 
int.class));
+  }
+}
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDefaultValue.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDefaultValue.java
new file mode 100644
index 000000000..ef03413e1
--- /dev/null
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestDefaultValue.java
@@ -0,0 +1,144 @@
+/*
+ * 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.it.testcase;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.servicecomb.it.Consumers;
+import org.apache.servicecomb.it.junit.ITJUnitUtils;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class TestDefaultValue {
+  interface DefaultValueIntf {
+    int intQuery(Integer input);
+
+    int intHeader(Integer input);
+
+    int intForm(Integer input);
+  }
+
+  interface DefaultValueRequireIntf extends DefaultValueIntf {
+    int intQueryRequire(Integer input);
+
+    int intHeaderRequire(Integer input);
+
+    int intFormRequire(Integer input);
+  }
+
+  private static Consumers<DefaultValueIntf> consumersJaxrs = new 
Consumers<>("defaultValueJaxrs",
+      DefaultValueIntf.class);
+
+  private static Consumers<DefaultValueRequireIntf> consumersSpringmvc = new 
Consumers<>("defaultValueSpringmvc",
+      DefaultValueRequireIntf.class);
+
+  @BeforeClass
+  public static void classSetup() {
+    consumersJaxrs.init(ITJUnitUtils.getTransport());
+    consumersSpringmvc.init(ITJUnitUtils.getTransport());
+  }
+
+  @Test
+  public void intQuery_jaxrs_intf() {
+    assertEquals(13, consumersJaxrs.getIntf().intQuery(null));
+  }
+
+  @Test
+  public void intQuery_jaxrs_rt() {
+    assertEquals(13, (int) 
consumersJaxrs.getSCBRestTemplate().getForObject("/intQuery", int.class));
+  }
+
+  @Test
+  public void intHeader_jaxrs_intf() {
+    assertEquals(13, consumersJaxrs.getIntf().intHeader(null));
+  }
+
+  @Test
+  public void intHeader_jaxrs_rt() {
+    assertEquals(13, (int) 
consumersJaxrs.getSCBRestTemplate().getForObject("/intHeader", int.class));
+  }
+
+  @Test
+  public void intForm_jaxrs_intf() {
+    assertEquals(13, consumersJaxrs.getIntf().intForm(null));
+  }
+
+  @Test
+  public void intForm_jaxrs_rt() {
+    assertEquals(13, (int) 
consumersJaxrs.getSCBRestTemplate().postForObject("/intForm", null, int.class));
+  }
+
+  @Test
+  public void intQuery_springmvc_intf() {
+    assertEquals(13, consumersSpringmvc.getIntf().intQuery(null));
+  }
+
+  @Test
+  public void intQuery_springmvc_rt() {
+    assertEquals(13, (int) 
consumersSpringmvc.getSCBRestTemplate().getForObject("/intQuery", int.class));
+  }
+
+  @Test
+  public void intHeader_springmvc_intf() {
+    assertEquals(13, consumersSpringmvc.getIntf().intHeader(null));
+  }
+
+  @Test
+  public void intHeader_springmvc_rt() {
+    assertEquals(13, (int) 
consumersSpringmvc.getSCBRestTemplate().getForObject("/intHeader", int.class));
+  }
+
+  @Test
+  public void intForm_springmvc_intf() {
+    assertEquals(13, consumersSpringmvc.getIntf().intForm(null));
+  }
+
+  @Test
+  public void intForm_springmvc_rt() {
+    assertEquals(13, (int) 
consumersSpringmvc.getSCBRestTemplate().postForObject("/intForm", null, 
int.class));
+  }
+
+  @Test
+  public void intQuery_require_springmvc_intf() {
+    assertEquals(13, consumersSpringmvc.getIntf().intQueryRequire(null));
+  }
+
+  @Test
+  public void intQuery_require_springmvc_rt() {
+    assertEquals(13, (int) 
consumersSpringmvc.getSCBRestTemplate().getForObject("/intQueryRequire", 
int.class));
+  }
+
+  @Test
+  public void intHeader_require_springmvc_intf() {
+    assertEquals(13, consumersSpringmvc.getIntf().intHeaderRequire(null));
+  }
+
+  @Test
+  public void intHeader_require_springmvc_rt() {
+    assertEquals(13, (int) 
consumersSpringmvc.getSCBRestTemplate().getForObject("/intHeaderRequire", 
int.class));
+  }
+
+  @Test
+  public void intForm_require_springmvc_intf() {
+    assertEquals(13, consumersSpringmvc.getIntf().intFormRequire(null));
+  }
+
+  @Test
+  public void intForm_require_springmvc_rt() {
+    assertEquals(13, (int) 
consumersSpringmvc.getSCBRestTemplate().postForObject("/intFormRequire", null, 
int.class));
+  }
+}
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestIgnoreMethod.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestIgnoreMethod.java
new file mode 100644
index 000000000..5a836d462
--- /dev/null
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestIgnoreMethod.java
@@ -0,0 +1,45 @@
+/*
+ * 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.it.testcase;
+
+import org.apache.servicecomb.core.SCBEngine;
+import org.apache.servicecomb.core.definition.MicroserviceMeta;
+import org.apache.servicecomb.core.definition.SchemaMeta;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestIgnoreMethod {
+  MicroserviceMeta microserviceMeta = 
SCBEngine.getInstance().getProducerMicroserviceMeta();
+
+  @Test
+  public void ignoreMethodPojo_apiOperation() {
+    SchemaMeta schemaMeta = 
microserviceMeta.findSchemaMeta("ignoreMethodPojo");
+    Assert.assertNull(schemaMeta.findOperation("hideByApiOperation"));
+  }
+
+  @Test
+  public void ignoreMethodJaxrs_apiOperation() {
+    SchemaMeta schemaMeta = 
microserviceMeta.findSchemaMeta("ignoreMethodJaxrs");
+    Assert.assertNull(schemaMeta.findOperation("hideByApiOperation"));
+  }
+
+  @Test
+  public void ignoreMethodSpringmvc_apiOperation() {
+    SchemaMeta schemaMeta = 
microserviceMeta.findSchemaMeta("ignoreMethodSpringmvc");
+    Assert.assertNull(schemaMeta.findOperation("hideByApiOperation"));
+  }
+}
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/base/TestParamCodec.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestParamCodec.java
similarity index 97%
rename from 
integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/base/TestParamCodec.java
rename to 
integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestParamCodec.java
index d6ec50cc1..5ec8c09e1 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/base/TestParamCodec.java
+++ 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestParamCodec.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.servicecomb.it.testcase.base;
+package org.apache.servicecomb.it.testcase;
 
 import static org.junit.Assert.assertEquals;
 
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/base/TestDataTypeJaxrs.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/base/TestDataTypeJaxrs.java
deleted file mode 100644
index 691b8bd69..000000000
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/base/TestDataTypeJaxrs.java
+++ /dev/null
@@ -1,258 +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.it.testcase.base;
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.servicecomb.core.Const;
-import org.apache.servicecomb.it.extend.engine.ITClientHttpRequestFactory;
-import org.apache.servicecomb.it.extend.engine.ITInvoker;
-import org.apache.servicecomb.it.testcase.support.DataTypeRestIntf;
-import org.apache.servicecomb.it.testcase.support.ProducerDevMode;
-import org.apache.servicecomb.provider.springmvc.reference.CseRestTemplate;
-import org.junit.Test;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.client.RestTemplate;
-
-public class TestDataTypeJaxrs {
-  private static DataTypeRestIntf dataTypeIntf;
-
-  private static ITClientHttpRequestFactory clientHttpRequestFactory = new 
ITClientHttpRequestFactory();
-
-  private static RestTemplate restTemplate = new CseRestTemplate();
-
-  private static String urlPrefix;
-
-  private static String transport;
-
-  static {
-    restTemplate.setRequestFactory(clientHttpRequestFactory);
-  }
-
-  public static void init(String transport, ProducerDevMode producerDevMode) {
-    TestDataTypeJaxrs.transport = transport;
-    dataTypeIntf = ITInvoker
-        .createProxy("it-producer", "dataType" + producerDevMode.name(), 
transport, DataTypeRestIntf.class);
-
-    clientHttpRequestFactory.setTransport(transport);
-
-    urlPrefix = "cse://it-producer/v1/dataType" + producerDevMode.name();
-  }
-
-  @Test
-  public void checkTransport_intf() {
-    assertEquals(transport, dataTypeIntf.checkTransport());
-  }
-
-  @Test
-  public void checkTransport_rt() {
-    assertEquals(transport, restTemplate.getForObject(urlPrefix + 
"/checkTransport", String.class));
-  }
-
-  @Test
-  public void intPath_intf() {
-    int expect = 10;
-    assertEquals(expect, dataTypeIntf.intPath(expect));
-  }
-
-  @Test
-  public void intPath_rt() {
-    int expect = 10;
-    assertEquals(expect, (int) restTemplate.getForObject(urlPrefix + 
"/intPath/" + expect, int.class));
-  }
-
-  @Test
-  public void intQuery_intf() {
-    assertEquals(10, dataTypeIntf.intQuery(10));
-  }
-
-  @Test
-  public void intQuery_rt() {
-    int expect = 10;
-    assertEquals(expect, (int) restTemplate.getForObject(urlPrefix + 
"/intQuery?input=" + expect, int.class));
-  }
-
-  @Test
-  public void intHeader_intf() {
-    assertEquals(10, dataTypeIntf.intHeader(10));
-  }
-
-  @Test
-  public void intHeader_rt() {
-    HttpHeaders headers = new HttpHeaders();
-    headers.add("input", "10");
-    @SuppressWarnings("rawtypes")
-    HttpEntity entity = new HttpEntity<>(null, headers);
-    ResponseEntity<Integer> response = restTemplate.exchange(urlPrefix + 
"/intHeader",
-        HttpMethod.GET,
-        entity,
-        int.class);
-    assertEquals(10, (int) response.getBody());
-  }
-
-  @Test
-  public void intCookie_intf() {
-    assertEquals(10, dataTypeIntf.intCookie(10));
-  }
-
-  @Test
-  public void intCookie_rt() {
-    HttpHeaders headers = new HttpHeaders();
-    headers.add("Cookie", "input=10");
-    @SuppressWarnings("rawtypes")
-    HttpEntity entity = new HttpEntity<>(null, headers);
-    ResponseEntity<Integer> response = restTemplate.exchange(urlPrefix + 
"/intCookie",
-        HttpMethod.GET,
-        entity,
-        int.class);
-    assertEquals(10, (int) response.getBody());
-  }
-
-  @Test
-  public void intBody_intf() {
-    assertEquals(10, dataTypeIntf.intBody(10));
-  }
-
-  @Test
-  public void intBody_rt() {
-    assertEquals(10, (int) restTemplate.postForObject(urlPrefix + "/intBody", 
10, int.class));
-  }
-
-  @Test
-  public void intForm_intf() {
-    assertEquals(10, dataTypeIntf.intForm(10));
-  }
-
-  @Test
-  public void intForm_rt() {
-    HttpHeaders formHeaders = new HttpHeaders();
-    formHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-    Map<String, Integer> map = new HashMap<>();
-
-    map.put("a", 10);
-    HttpEntity<Map<String, Integer>> formEntiry = new HttpEntity<>(map, 
formHeaders);
-
-    assertEquals(10, (int) restTemplate.postForEntity(urlPrefix + "/intForm", 
formEntiry, int.class).getBody());
-    Map<String, String> params = new HashMap<>();
-    params.put("a", "5");
-    assertEquals(5, (int) restTemplate.postForEntity(urlPrefix + "/intForm", 
params, int.class).getBody());
-  }
-
-  @Test
-  public void intQueryWithDefault_rt() {
-    int expect = 10;
-    assertEquals(expect,
-        (int) restTemplate.getForObject(urlPrefix + 
"/intQueryWithDefault?input=" + expect, int.class));
-    assertEquals(13, (int) restTemplate.getForObject(urlPrefix + 
"/intQueryWithDefault", int.class));
-  }
-
-  @Test
-  public void intHeaderWithDefault_rt() {
-    HttpHeaders headers = new HttpHeaders();
-    headers.add("input", "11");
-    @SuppressWarnings("rawtypes")
-    HttpEntity entity = new HttpEntity<>(null, headers);
-    ResponseEntity<Integer> response = restTemplate.exchange(urlPrefix + 
"/intHeaderWithDefault",
-        HttpMethod.GET,
-        entity,
-        int.class);
-    assertEquals(11, (int) response.getBody());
-    headers.remove("input");
-    @SuppressWarnings("rawtypes")
-    HttpEntity<Object> entity1 = new HttpEntity<>(null, headers);
-    ResponseEntity<Integer> response1 = restTemplate.exchange(urlPrefix + 
"/intHeaderWithDefault",
-        HttpMethod.GET,
-        entity1,
-        int.class);
-    assertEquals(13, (int) response1.getBody());
-  }
-
-//  @Test
-//  public void intCookieWithDefault_rt() {
-//    HttpHeaders headers = new HttpHeaders();
-////    headers.add("Cookie", "input=10");
-////    @SuppressWarnings("rawtypes")
-////    HttpEntity entity = new HttpEntity<>( headers);
-////    ResponseEntity<Integer> response = restTemplate.exchange(urlPrefix + 
"/intCookieWithDefault",
-////        HttpMethod.GET,
-////        entity,
-////        int.class);
-////    assertEquals(10, (int) response.getBody());
-////    headers.remove("Cookie");
-//    headers.add("Cookie", "input=10");
-//
-//    @SuppressWarnings("rawtypes")
-//    HttpEntity entity1 = new HttpEntity<>(headers);
-//    ResponseEntity<Integer> response1 = restTemplate.exchange(urlPrefix + 
"/intCookieWithDefault",
-//        HttpMethod.GET,
-//        entity1,
-//        Integer.class);
-//    assertEquals(10, (int) response1.getBody());
-//  }
-
-  @Test
-  public void intFormWithDefault_rt() {
-    HttpHeaders formHeaders = new HttpHeaders();
-    formHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-    Map<String, Integer> map = new HashMap<>();
-
-    map.put("a", 10);
-    HttpEntity<Map<String, Integer>> formEntiry = new HttpEntity<>(map, 
formHeaders);
-
-    assertEquals(10,
-        (int) restTemplate.postForEntity(urlPrefix + "/intFormWithDefault", 
formEntiry, int.class).getBody());
-
-    map.remove("a");
-
-    HttpEntity<Map<String, Integer>> formEntiry1 = new HttpEntity<>(map, 
formHeaders);
-
-    assertEquals(13,
-        (int) restTemplate.postForEntity(urlPrefix + "/intFormWithDefault", 
formEntiry1, int.class).getBody());
-  }
-
-  //伪契约不支持 highway
-  @Test
-  public void testRequest_rt() {
-    //@context don not support highway
-    Map<String, String> params = new HashMap<>();
-    params.put("a", "5");
-    params.put("b", "3");
-    if (transport.equals(Const.RESTFUL)) {
-      int result = restTemplate.getForObject(urlPrefix + 
"/request?a={a}&b={b}", Integer.class, 5, 4);
-      assertEquals(1, result);
-    }
-  }
-
-  @Test
-  public void testDefault_intf() {
-    int result = dataTypeIntf.defaultPath();
-    assertEquals(result, 100);
-  }
-
-  @Test
-  public void testDefault_rt() {
-    Integer result = restTemplate.getForObject(urlPrefix, Integer.class);
-    assertEquals((int) result, 100);
-  }
-}
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/base/TestDataTypePojo.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/base/TestDataTypePojo.java
deleted file mode 100644
index c9bc8e886..000000000
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/base/TestDataTypePojo.java
+++ /dev/null
@@ -1,99 +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.it.testcase.base;
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.servicecomb.it.extend.engine.ITClientHttpRequestFactory;
-import org.apache.servicecomb.it.extend.engine.ITInvoker;
-import org.apache.servicecomb.it.testcase.support.DataTypePojoIntf;
-import org.apache.servicecomb.it.testcase.support.ProducerDevMode;
-import org.apache.servicecomb.provider.springmvc.reference.CseRestTemplate;
-import org.junit.Test;
-import org.springframework.web.client.RestTemplate;
-
-public class TestDataTypePojo {
-  private static DataTypePojoIntf dataTypePojoIntf;
-
-  private static ITClientHttpRequestFactory clientHttpRequestFactory = new 
ITClientHttpRequestFactory();
-
-  private static RestTemplate restTemplate = new CseRestTemplate();
-
-  private static String urlPrefix;
-
-  private static String transport;
-
-  static {
-    restTemplate.setRequestFactory(clientHttpRequestFactory);
-  }
-
-  public static void init(String transport, ProducerDevMode producerDevMode) {
-    TestDataTypePojo.transport = transport;
-    dataTypePojoIntf = ITInvoker.createProxy("it-producer", "dataTypePojo", 
transport, DataTypePojoIntf.class);
-
-    clientHttpRequestFactory.setTransport(transport);
-
-    urlPrefix = "cse://it-producer/v1/dataType" + producerDevMode.name();
-  }
-
-  @Test
-  public void checkTransport_intf() {
-    assertEquals(transport, dataTypePojoIntf.checkTransport());
-  }
-
-  @Test
-  public void checkTransport_rt() {
-    assertEquals(transport, restTemplate.postForObject(urlPrefix + 
"/checkTransport", "", String.class));
-  }
-
-  @Test
-  public void intBody_intf() {
-    assertEquals(10, dataTypePojoIntf.intBody(10));
-  }
-
-  @Test
-  public void intBody_rt() {
-    Map<String, Integer> map = new HashMap<>();
-    Map<String, String> map1 = new HashMap<>();
-    map.put("input", 10);
-    map1.put("input", "10");
-
-    assertEquals(10, (int) restTemplate.postForObject(urlPrefix + "/intBody", 
map, int.class));
-    assertEquals(10, (int) restTemplate.postForObject(urlPrefix + "/intBody", 
map1
-        , int.class));
-  }
-
-  @Test
-  public void intReduce_intf() {
-    assertEquals(8, dataTypePojoIntf.reduce(10, 2));
-  }
-
-  @Test
-  public void intReduce_rt() {
-    Map<String, Integer> map = new HashMap<>();
-    map.put("a", 10);
-    map.put("b", 2);
-    Map<String, String> map1 = new HashMap<>();
-    map1.put("a", "10");
-    map1.put("b", "2");
-    assertEquals(8, (int) restTemplate.postForObject(urlPrefix + "/reduce", 
map, int.class));
-    assertEquals(8, (int) restTemplate.postForObject(urlPrefix + "/reduce", 
map1, int.class));
-  }
-}
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/base/TestDataTypeSpringmvc.java
 
b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/base/TestDataTypeSpringmvc.java
deleted file mode 100644
index e21036a43..000000000
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/base/TestDataTypeSpringmvc.java
+++ /dev/null
@@ -1,315 +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.it.testcase.base;
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.servicecomb.it.extend.engine.ITClientHttpRequestFactory;
-import org.apache.servicecomb.it.extend.engine.ITInvoker;
-import org.apache.servicecomb.it.testcase.support.DataTypeRestIntf;
-import org.apache.servicecomb.it.testcase.support.ProducerDevMode;
-import org.apache.servicecomb.provider.springmvc.reference.CseRestTemplate;
-import org.junit.Test;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
-import org.springframework.web.client.RestTemplate;
-
-public class TestDataTypeSpringmvc {
-  private static DataTypeRestIntf dataTypeIntf;
-
-  private static ITClientHttpRequestFactory clientHttpRequestFactory = new 
ITClientHttpRequestFactory();
-
-  private static RestTemplate restTemplate = new CseRestTemplate();
-
-  private static String urlPrefix;
-
-  private static String transport;
-
-  static {
-    restTemplate.setRequestFactory(clientHttpRequestFactory);
-  }
-
-  public static void init(String transport, ProducerDevMode producerDevMode) {
-    TestDataTypeSpringmvc.transport = transport;
-    dataTypeIntf = ITInvoker
-        .createProxy("it-producer", "dataType" + producerDevMode.name(), 
transport, DataTypeRestIntf.class);
-
-    clientHttpRequestFactory.setTransport(transport);
-
-    urlPrefix = "cse://it-producer/v1/dataType" + producerDevMode.name();
-  }
-
-  @Test
-  public void checkTransport_intf() {
-    assertEquals(transport, dataTypeIntf.checkTransport());
-  }
-
-  @Test
-  public void checkTransport_rt() {
-    assertEquals(transport, restTemplate.getForObject(urlPrefix + 
"/checkTransport", String.class));
-  }
-
-  @Test
-  public void intPath_intf() {
-    int expect = 10;
-    assertEquals(expect, dataTypeIntf.intPath(expect));
-  }
-
-  @Test
-  public void intPath_rt() {
-    int expect = 10;
-    assertEquals(expect, (int) restTemplate.getForObject(urlPrefix + 
"/intPath/" + expect, int.class));
-  }
-
-  @Test
-  public void intQuery_intf() {
-    assertEquals(10, dataTypeIntf.intQuery(10));
-  }
-
-  @Test
-  public void intQuery_rt() {
-    int expect = 10;
-    assertEquals(expect, (int) restTemplate.getForObject(urlPrefix + 
"/intQuery?input=" + expect, int.class));
-  }
-
-  @Test
-  public void intHeader_intf() {
-    assertEquals(10, dataTypeIntf.intHeader(10));
-  }
-
-  @Test
-  public void intHeader_rt() {
-    HttpHeaders headers = new HttpHeaders();
-    headers.add("input", "10");
-    @SuppressWarnings("rawtypes")
-    HttpEntity entity = new HttpEntity<>(null, headers);
-    ResponseEntity<Integer> response = restTemplate.exchange(urlPrefix + 
"/intHeader",
-        HttpMethod.GET,
-        entity,
-        int.class);
-    assertEquals(10, (int) response.getBody());
-  }
-
-  @Test
-  public void intCookie_intf() {
-    assertEquals(10, dataTypeIntf.intCookie(10));
-  }
-
-  @Test
-  public void intCookie_rt() {
-    HttpHeaders headers = new HttpHeaders();
-    headers.add("Cookie", "input=10");
-    @SuppressWarnings("rawtypes")
-    HttpEntity entity = new HttpEntity<>(null, headers);
-    ResponseEntity<Integer> response = restTemplate.exchange(urlPrefix + 
"/intCookie",
-        HttpMethod.GET,
-        entity,
-        int.class);
-    assertEquals(10, (int) response.getBody());
-  }
-
-  @Test
-  public void intBody_intf() {
-    assertEquals(10, dataTypeIntf.intBody(10));
-  }
-
-  @Test
-  public void intBody_rt() {
-    assertEquals(10, (int) restTemplate.postForObject(urlPrefix + "/intBody", 
10, int.class));
-  }
-
-  @Test
-  public void intForm_intf() {
-    assertEquals(10, dataTypeIntf.intForm(10));
-  }
-
-  @Test
-  public void intForm_rt() {
-    HttpHeaders formHeaders = new HttpHeaders();
-    formHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-    Map<String, Integer> map = new HashMap<>();
-
-    map.put("form1", 10);
-    HttpEntity<Map<String, Integer>> formEntiry = new HttpEntity<>(map, 
formHeaders);
-
-    assertEquals(10, (int) restTemplate.postForEntity(urlPrefix + "/intForm", 
formEntiry, int.class).getBody());
-    //两种调用方式都可以
-    assertEquals(10, (int) restTemplate.postForEntity(urlPrefix + "/intForm", 
map, int.class).getBody());
-  }
-
-  @Test
-  public void intAttribute_intf() {
-    assertEquals(10, dataTypeIntf.intAttribute(10));
-  }
-
-  @Test
-  public void intAttribute_rt() {
-    Map<String, Integer> map = new HashMap<>();
-    map.put("a", 10);
-    int result = restTemplate.postForObject(urlPrefix + "/intAttribute", map, 
Integer.class);
-    assertEquals(10, result);
-  }
-
-  @Test
-  public void intQueryWithDefault_rt() {
-    int expect = 10;
-    assertEquals(expect,
-        (int) restTemplate.getForObject(urlPrefix + 
"/intQueryWithDefault?input=" + expect, int.class));
-    assertEquals(13, (int) restTemplate.getForObject(urlPrefix + 
"/intQueryWithDefault", int.class));
-  }
-
-  @Test
-  public void intHeaderWithDefault_rt() {
-    HttpHeaders headers = new HttpHeaders();
-    headers.add("input", "10");
-    @SuppressWarnings("rawtypes")
-    HttpEntity entity = new HttpEntity<>(null, headers);
-    ResponseEntity<Integer> response = restTemplate.exchange(urlPrefix + 
"/intHeaderWithDefault",
-        HttpMethod.GET,
-        entity,
-        int.class);
-    assertEquals(10, (int) response.getBody());
-    headers.remove("input");
-    @SuppressWarnings("rawtypes")
-    HttpEntity<Object> entity1 = new HttpEntity<>(null, headers);
-    ResponseEntity<Integer> response1 = restTemplate.exchange(urlPrefix + 
"/intHeaderWithDefault",
-        HttpMethod.GET,
-        entity1,
-        int.class);
-    assertEquals(13, (int) response1.getBody());
-  }
-//暂时不支持 cookie 设置默认值,不过以后会支持,先放这里
-//  @Test
-//  public void intCookieWithDefault_rt() {
-//    HttpHeaders headers = new HttpHeaders();
-////    headers.add("Cookie", "input=10");
-////    @SuppressWarnings("rawtypes")
-////    HttpEntity entity = new HttpEntity<>( headers);
-////    ResponseEntity<Integer> response = restTemplate.exchange(urlPrefix + 
"/intCookieWithDefault",
-////        HttpMethod.GET,
-////        entity,
-////        int.class);
-////    assertEquals(10, (int) response.getBody());
-////    headers.remove("Cookie");
-//    headers.add("Cookie", "input=10");
-//
-//    @SuppressWarnings("rawtypes")
-//    HttpEntity entity1 = new HttpEntity<>( headers);
-//    ResponseEntity<Integer> response1 = restTemplate.exchange(urlPrefix + 
"/intCookieWithDefault",
-//        HttpMethod.GET,
-//        entity1,
-//        Integer.class);
-//    assertEquals(10, (int) response1.getBody());
-//  }
-
-  @Test
-  public void intAttributeWithDefault_rt() {
-    Map<String, Integer> map = new HashMap<>();
-    map.put("a", 10);
-    int result = restTemplate.postForObject(urlPrefix + 
"/intAttributeWithDefault", map, Integer.class);
-    assertEquals(10, result);
-
-    map.remove("a");
-    int result1 = restTemplate.postForObject(urlPrefix + 
"/intAttributeWithDefault", map, Integer.class);
-    assertEquals(13, result1);
-  }
-
-  @Test
-  public void intFormWithDefault_rt() {
-    HttpHeaders formHeaders = new HttpHeaders();
-    formHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-    Map<String, Integer> map = new HashMap<>();
-//    map.put("form1", 13);
-    HttpEntity<Map<String, Integer>> formEntiry = new HttpEntity<>(map, 
formHeaders);
-
-    assertEquals(13, (int) restTemplate.postForEntity(urlPrefix + 
"/intFormWithDefault", formEntiry, int.class).getBody());
-    //两种调用方式都可以
-    assertEquals(13, (int) restTemplate.postForEntity(urlPrefix + 
"/intFormWithDefault", map, int.class).getBody());
-  }
-
-  @Test
-  public void intAdd_intf() {
-    int i = dataTypeIntf.intAdd(2, 3);
-    assertEquals(5, i);
-  }
-
-  @Test
-  public void intAdd_rt() {
-    Map<String, Integer> map = new HashMap<>();
-    map.put("a", 10);
-    map.put("b", 10);
-    int result = restTemplate.postForObject(urlPrefix + "/add", map, 
Integer.class);
-    assertEquals(20, result);
-  }
-
-  @Test
-  public void intMulti_intf() {
-    int a = 1, b = 1, c = 1, d = 1, e = 1;
-    assertEquals(String.format("a=%s,b=%s,c=%s,d=%s,e=%s", a, b, c, d, e), 
dataTypeIntf.intMulti(a, b, c, d, e));
-  }
-
-  @Test
-  public void intMulti_rt() {
-    Map<String, String> params = new HashMap<>();
-    params.put("a", "1");
-    params.put("e", "1");
-    params.put("c", "1");
-    HttpHeaders headers = new HttpHeaders();
-    headers.add(HttpHeaders.COOKIE, "b=1");
-    headers.add("d", "1");
-    HttpEntity<?> requestEntity = new HttpEntity<>(headers);
-    ResponseEntity<String> result = restTemplate.exchange(
-        urlPrefix + "/intMulti/{e}?a={a}&c={c}",
-        HttpMethod.POST,
-        requestEntity,
-        String.class,
-        params);
-    assertEquals(String.format("a=%s,b=%s,c=%s,d=%s,e=%s", 1, 1, 1, 1, 1), 
result.getBody());
-  }
-
-  @Test
-  public void intRequestQuery_rt() {
-    int expect = 10;
-    Map<String, String> params = new HashMap<>();
-    params.put("a", "10");
-    assertEquals(expect, (int) restTemplate.postForObject(urlPrefix + 
"/queryRequest?a=" + expect, null, int.class));
-    assertEquals(expect, (int) restTemplate.postForObject(urlPrefix + 
"/queryRequest?a={a}", null, int.class, params));
-  }
-
-  @Test
-  public void intRequestForm_rt() {
-    HttpHeaders formHeaders = new HttpHeaders();
-    formHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-    Map<String, Integer> map = new HashMap<>();
-
-    map.put("form1", 10);
-    map.put("form2", 10);
-    HttpEntity<Map<String, Integer>> formEntiry = new HttpEntity<>(map, 
formHeaders);
-
-    assertEquals(String.format("form1=%s,form2=%s", 10, 10),
-        restTemplate.postForEntity(urlPrefix + "/formRequest", formEntiry, 
String.class).getBody());
-    //other method
-    assertEquals(String.format("form1=%s,form2=%s", 10, 10),
-        restTemplate.postForEntity(urlPrefix + "/formRequest", map, 
String.class).getBody());
-  }
-}
diff --git 
a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DataTypeJaxrs.java
 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DataTypeJaxrs.java
deleted file mode 100644
index f65e09da9..000000000
--- 
a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DataTypeJaxrs.java
+++ /dev/null
@@ -1,125 +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.it.schema;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.ws.rs.CookieParam;
-import javax.ws.rs.DefaultValue;
-import javax.ws.rs.FormParam;
-import javax.ws.rs.GET;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.Context;
-
-import org.apache.servicecomb.provider.rest.common.RestSchema;
-
-@RestSchema(schemaId = "dataTypeJaxrs")
-@Path("/v1/dataTypeJaxrs")
-public class DataTypeJaxrs {
-  private DataTypePojo pojo = new DataTypePojo();
-
-  public void test(HttpServletRequest request, HttpServletResponse response) {
-
-  }
-
-  @Path("checkTransport")
-  @GET
-  public String checkTransport(HttpServletRequest request) {
-    return pojo.checkTransport(request);
-  }
-
-  @Path("intPath/{input}")
-  @GET
-  public int intPath(@PathParam("input") int input) {
-    return pojo.intBody(input);
-  }
-
-  @Path("intQuery")
-  @GET
-  public int intQuery(@QueryParam("input") int input) {
-    return pojo.intBody(input);
-  }
-
-  @Path("intHeader")
-  @GET
-  public int intHeader(@HeaderParam("input") int input) {
-    return pojo.intBody(input);
-  }
-
-  @Path("intCookie")
-  @GET
-  public int intCookie(@CookieParam("input") int input) {
-    return pojo.intBody(input);
-  }
-
-  @Path("intForm")
-  @POST
-  public int intForm(@FormParam("a") int a) {
-    return pojo.intBody(a);
-  }
-
-
-  @Path("intBody")
-  @POST
-  public int intBody(int input) {
-    return pojo.intBody(input);
-  }
-
-  @GET
-  public int defaultPath() {
-    return pojo.intBody(100);
-  }
-
-
-  @Path("intQueryWithDefault")
-  @GET
-  public int intQueryWithDefault(@QueryParam("input") @DefaultValue("13") int 
input) {
-    return pojo.intBody(input);
-  }
-
-  @Path("intHeaderWithDefault")
-  @GET
-  public int intHeaderWithDefault(@HeaderParam(value = "input") 
@DefaultValue("13") int input) {
-    return pojo.intBody(input);
-  }
-
-  //暂时不支持 cookie设置默认值,但是不影响先放这里
-  @Path("intCookieWithDefault")
-  @GET
-  public int intCookieWithDefault(@CookieParam(value = "input") 
@DefaultValue("13") int input) {
-    return pojo.intBody(input);
-  }
-
-  @Path("intFormWithDefault")
-  @POST
-  public int intFormWithDefault(@FormParam("a") @DefaultValue("13") int a) {
-    return pojo.intBody(a);
-  }
-
-  //这个是伪契约,不支持 highway
-  @Path("request")
-  @GET
-  public int request(@Context HttpServletRequest request) {
-    int a = Integer.parseInt(request.getParameter("a"));
-    int b = Integer.parseInt(request.getParameter("b"));
-    return a - b;
-  }
-}
diff --git 
a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DataTypeJaxrsSchema.java
 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DataTypeJaxrsSchema.java
new file mode 100644
index 000000000..1e372cf97
--- /dev/null
+++ 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DataTypeJaxrsSchema.java
@@ -0,0 +1,74 @@
+/*
+ * 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.it.schema;
+
+import javax.ws.rs.CookieParam;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.QueryParam;
+
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+
+@RestSchema(schemaId = "dataTypeJaxrs")
+@Path("/v1/dataTypeJaxrs")
+public class DataTypeJaxrsSchema {
+  @Path("intPath/{input}")
+  @GET
+  public int intPath(@PathParam("input") int input) {
+    return input;
+  }
+
+  @Path("intQuery")
+  @GET
+  public int intQuery(@QueryParam("input") int input) {
+    return input;
+  }
+
+  @Path("intHeader")
+  @GET
+  public int intHeader(@HeaderParam("input") int input) {
+    return input;
+  }
+
+  @Path("intCookie")
+  @GET
+  public int intCookie(@CookieParam("input") int input) {
+    return input;
+  }
+
+  @Path("intForm")
+  @POST
+  public int intForm(@FormParam("input") int input) {
+    return input;
+  }
+
+  @Path("intBody")
+  @POST
+  public int intBody(int input) {
+    return input;
+  }
+
+  @Path("add")
+  @GET
+  public int add(@QueryParam("a") int a, @QueryParam("b") int b) {
+    return a + b;
+  }
+}
diff --git 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/support/DataTypePojoIntf.java
 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DataTypePojoSchema.java
similarity index 67%
rename from 
integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/support/DataTypePojoIntf.java
rename to 
integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DataTypePojoSchema.java
index eace6981c..549fc9be4 100644
--- 
a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/support/DataTypePojoIntf.java
+++ 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DataTypePojoSchema.java
@@ -1,4 +1,4 @@
-package org.apache.servicecomb.it.testcase.support;/*
+/*
  * 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.
@@ -14,11 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.servicecomb.it.schema;
 
-public interface DataTypePojoIntf {
-  String checkTransport();
+import org.apache.servicecomb.provider.pojo.RpcSchema;
 
-  int intBody(int input);
+import io.swagger.annotations.SwaggerDefinition;
 
-  int reduce(int a, int b);
+@RpcSchema(schemaId = "dataTypePojo")
+@SwaggerDefinition(basePath = "/v1/dataTypePojo")
+public class DataTypePojoSchema {
+  public int intBody(int input) {
+    return input;
+  }
+
+  public int add(int a, int b) {
+    return a + b;
+  }
 }
diff --git 
a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DataTypeSpringmvc.java
 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DataTypeSpringmvc.java
deleted file mode 100644
index f6a35589f..000000000
--- 
a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DataTypeSpringmvc.java
+++ /dev/null
@@ -1,158 +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.it.schema;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.DefaultValue;
-
-import org.apache.servicecomb.provider.rest.common.RestSchema;
-import org.springframework.web.bind.annotation.CookieValue;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestAttribute;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestHeader;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-
-@RestSchema(schemaId = "dataTypeSpringmvc")
-@RequestMapping(path = "/v1/dataTypeSpringmvc")
-public class DataTypeSpringmvc {
-  private DataTypePojo pojo = new DataTypePojo();
-
-  @GetMapping(path = "checkTransport")
-  public String checkTransport(HttpServletRequest request) {
-    return pojo.checkTransport(request);
-  }
-
-  @GetMapping("intPath/{input}")
-  public int intPath(@PathVariable("input") int input) {
-    return pojo.intBody(input);
-  }
-
-  @GetMapping("intQuery")
-  public int intQuery(@RequestParam("input") int input) {
-    return pojo.intBody(input);
-  }
-
-  @GetMapping("intHeader")
-  public int intHeader(@RequestHeader("input") int input) {
-    return pojo.intBody(input);
-  }
-
-  @GetMapping("intCookie")
-  public int intCookie(@CookieValue("input") int input) {
-    return pojo.intBody(input);
-  }
-
-  @PostMapping("intBody")
-  public int intBody(@RequestBody int input) {
-    return pojo.intBody(input);
-  }
-
-  @PostMapping(path = "intForm")
-  @ApiImplicitParams({
-      @ApiImplicitParam(name = "form1", dataType = "integer", format = 
"int32", paramType = "form", value = "a required form param",
-          required = true)})
-  public int intForm(int form1) {
-    return pojo.intBody(form1);
-  }
-
-  @RequestMapping(path = "intAttribute", method = RequestMethod.POST)
-  public int intAttribute(@RequestAttribute("a") int a) {
-    return pojo.intBody(a);
-  }
-
-  @GetMapping("intQueryWithDefault")
-  public int intQueryWithDefault(@RequestParam(value = "input", defaultValue = 
"13") int input) {
-    return pojo.intBody(input);
-  }
-
-  @GetMapping("intHeaderWithDefault")
-  public int intHeaderWithDefault(@RequestHeader(value = "input", defaultValue 
= "13") int input) {
-    return pojo.intBody(input);
-  }
-
-  //暂时不支持cookie默认值,不过以后会修复,先放这里,不影响
-  @GetMapping("intCookieWithDefault")
-  public int intCookieWithDefault(@CookieValue(value = "input", defaultValue = 
"13") int input) {
-    return pojo.intBody(input);
-  }
-
-  @PostMapping(path = "intFormWithDefault")
-  @ApiImplicitParams({
-      @ApiImplicitParam(name = "form1", dataType = "integer", format = 
"int32", paramType = "form", value = "a required form param", defaultValue = 
"13",
-          required = true)})
-  public int intFormWithDefault(int form1) {
-    return pojo.intBody(form1);
-  }
-
-  //这里算是 jaxrs 和 springmvc 的一个混用,按道理是不能这么使用的,不过这样确实跑通了
-  //也算是增加了功能,就不删了
-  @RequestMapping(path = "intAttributeWithDefault", method = 
RequestMethod.POST)
-  public int intAttributeWithDefault(@RequestAttribute("a") 
@DefaultValue("13") int a) {
-    return pojo.intBody(a);
-  }
-
-  // this should be ignored as it's hidden
-  //服务端是不允许重载的,但是因为 这里设置 hidden = true,所以上面的可以正常运行
-  @ApiOperation(value = "", hidden = true, httpMethod = "POST")
-  public int intAdd(@RequestParam("a") int a) {
-    return pojo.intBody(a);
-  }
-
-  @RequestMapping(path = "add", method = RequestMethod.POST)
-  public int intAdd(@RequestAttribute("a") int a, @RequestAttribute("b") int 
b) {
-    return a + b;
-  }
-
-  @PostMapping(path = "intMulti/{e}")
-  @ApiImplicitParams({
-      @ApiImplicitParam(name = "a", dataType = "integer", format = "int32", 
paramType = "query"),
-      @ApiImplicitParam(name = "c", dataType = "integer", format = "int32", 
paramType = "query"),
-      @ApiImplicitParam(name = "d", dataType = "integer", format = "int32", 
paramType = "header"),
-      @ApiImplicitParam(name = "e", dataType = "integer", format = "int32", 
paramType = "path"),
-  })
-  public String intMulti(int a, @CookieValue(name = "b") int b, int c, int d, 
int e) {
-    return String.format("a=%s,b=%s,c=%s,d=%s,e=%s", a, b, c, d, e);
-  }
-
-  @PostMapping(path = "queryRequest")
-  @ApiImplicitParams({
-      @ApiImplicitParam(name = "a", dataType = "integer", format = "int32", 
paramType = "query"),
-  })
-  public int intRequestQuery(HttpServletRequest request) {
-    return Integer.parseInt(request.getParameter("a"));
-  }
-
-  @PostMapping(path = "formRequest")
-  @ApiImplicitParams({
-      @ApiImplicitParam(name = "form1", dataType = "integer", format = 
"int32", paramType = "form", value = "a required form param",
-          required = true),
-      @ApiImplicitParam(name = "form2", dataType = "integer", format = 
"int32", paramType = "form", value = "an optional form param")})
-  public String intRequestForm(HttpServletRequest request) {
-    int form1 = Integer.parseInt(request.getParameter("form1"));
-    int form2 = Integer.parseInt(request.getParameter("form2"));
-    return String.format("form1=%s,form2=%s", form1, form2);
-  }
-}
diff --git 
a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DataTypeSpringmvcSchema.java
 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DataTypeSpringmvcSchema.java
new file mode 100644
index 000000000..28375d25f
--- /dev/null
+++ 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DataTypeSpringmvcSchema.java
@@ -0,0 +1,67 @@
+/*
+ * 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.it.schema;
+
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+import org.springframework.web.bind.annotation.CookieValue;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestAttribute;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@RestSchema(schemaId = "dataTypeSpringmvc")
+@RequestMapping(path = "/v1/dataTypeSpringmvc")
+public class DataTypeSpringmvcSchema {
+  @GetMapping("intPath/{input}")
+  public int intPath(@PathVariable("input") int input) {
+    return input;
+  }
+
+  @GetMapping("intQuery")
+  public int intQuery(@RequestParam("input") int input) {
+    return input;
+  }
+
+  @GetMapping("intHeader")
+  public int intHeader(@RequestHeader("input") int input) {
+    return input;
+  }
+
+  @GetMapping("intCookie")
+  public int intCookie(@CookieValue("input") int input) {
+    return input;
+  }
+
+  @PostMapping("intForm")
+  public int intForm(@RequestAttribute("input") int input) {
+    return input;
+  }
+
+  @PostMapping("intBody")
+  public int intBody(@RequestBody int input) {
+    return input;
+  }
+
+  @GetMapping(path = "/add")
+  public int add(int a, int b) {
+    return a + b;
+  }
+}
diff --git 
a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DefaultValueJaxrsSchema.java
 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DefaultValueJaxrsSchema.java
new file mode 100644
index 000000000..1c88c8f95
--- /dev/null
+++ 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DefaultValueJaxrsSchema.java
@@ -0,0 +1,49 @@
+/*
+ * 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.it.schema;
+
+import javax.ws.rs.DefaultValue;
+import javax.ws.rs.FormParam;
+import javax.ws.rs.GET;
+import javax.ws.rs.HeaderParam;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.QueryParam;
+
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+
+@RestSchema(schemaId = "defaultValueJaxrs")
+@Path("/v1/defaultValueJaxrs")
+public class DefaultValueJaxrsSchema {
+  @Path("intQuery")
+  @GET
+  public int intQuery(@QueryParam("input") @DefaultValue("13") int input) {
+    return input;
+  }
+
+  @Path("intHeader")
+  @GET
+  public int intHeader(@HeaderParam(value = "input") @DefaultValue("13") int 
input) {
+    return input;
+  }
+
+  @Path("intForm")
+  @POST
+  public int intForm(@FormParam("input") @DefaultValue("13") int input) {
+    return input;
+  }
+}
diff --git 
a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DefaultValueSpringmvcSchema.java
 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DefaultValueSpringmvcSchema.java
new file mode 100644
index 000000000..e62bc1d85
--- /dev/null
+++ 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DefaultValueSpringmvcSchema.java
@@ -0,0 +1,67 @@
+/*
+ * 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.it.schema;
+
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestHeader;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+
+@RestSchema(schemaId = "defaultValueSpringmvc")
+@RequestMapping(path = "/v1/defaultValueSpringmvc")
+public class DefaultValueSpringmvcSchema {
+  @GetMapping(path = "intQuery")
+  public int intQuery(@RequestParam(name = "input", required = false, 
defaultValue = "13") int input) {
+    return input;
+  }
+
+  @GetMapping(path = "intHeader")
+  public int intHeader(@RequestHeader(name = "input", required = false, 
defaultValue = "13") int input) {
+    return input;
+  }
+
+  @ApiImplicitParams({
+      @ApiImplicitParam(name = "input", dataType = "integer", format = 
"int32", paramType = "form", value = "", defaultValue = "13", required = 
false)})
+  @PostMapping(path = "intForm")
+  public int intForm(int input) {
+    return input;
+  }
+
+  // springmvc rule: required should be false because defaultValue have value
+  @GetMapping(path = "intQueryRequire")
+  public int intQueryRequire(@RequestParam(name = "input", required = true, 
defaultValue = "13") int input) {
+    return input;
+  }
+
+  // springmvc rule: required should be false because defaultValue have value
+  @GetMapping(path = "intHeaderRequire")
+  public int intHeaderRequire(@RequestHeader(name = "input", required = true, 
defaultValue = "13") int input) {
+    return input;
+  }
+
+  @ApiImplicitParams({
+      @ApiImplicitParam(name = "input", dataType = "integer", format = 
"int32", paramType = "form", value = "a required form param", required = true, 
defaultValue = "13")})
+  @PostMapping(path = "intFormRequire")
+  public int intFormRequire(int input) {
+    return input;
+  }
+}
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 2620ecb54..d7980b03b 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
@@ -25,7 +25,7 @@
 import org.apache.servicecomb.provider.rest.common.RestSchema;
 
 @RestSchema(schemaId = "paramCodec")
-@Path("/base/v1/paramCodec")
+@Path("/v1/paramCodec")
 public class ParamCodecSchema {
   /**
    * Test path param and query param encode&decode
diff --git 
a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/TransportJaxrsSchema.java
 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/TransportJaxrsSchema.java
new file mode 100644
index 000000000..9c2290584
--- /dev/null
+++ 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/TransportJaxrsSchema.java
@@ -0,0 +1,35 @@
+/*
+ * 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.it.schema;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+
+import org.apache.servicecomb.core.Const;
+import 
org.apache.servicecomb.provider.rest.common.InvocationToHttpServletRequest;
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+
+@RestSchema(schemaId = "transportJaxrs")
+@Path("/v1/transportJaxrs")
+public class TransportJaxrsSchema {
+  @Path("checkTransport")
+  @GET
+  public String checkTransport(HttpServletRequest request) {
+    return request instanceof InvocationToHttpServletRequest ? Const.HIGHWAY : 
Const.RESTFUL;
+  }
+}
diff --git 
a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DataTypePojo.java
 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/TransportPojoSchema.java
similarity index 77%
rename from 
integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DataTypePojo.java
rename to 
integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/TransportPojoSchema.java
index 17ecfadfe..474a595c5 100644
--- 
a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/DataTypePojo.java
+++ 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/TransportPojoSchema.java
@@ -24,22 +24,10 @@
 
 import io.swagger.annotations.SwaggerDefinition;
 
-@RpcSchema(schemaId = "dataTypePojo")
-@SwaggerDefinition(basePath = "/v1/dataTypePojo")
-public class DataTypePojo {
+@RpcSchema(schemaId = "transportPojo")
+@SwaggerDefinition(basePath = "/v1/transportPojo")
+public class TransportPojoSchema {
   public String checkTransport(HttpServletRequest request) {
-    if (request instanceof InvocationToHttpServletRequest) {
-      return Const.HIGHWAY;
-    }
-
-    return Const.RESTFUL;
-  }
-
-  public int intBody(int input) {
-    return input;
-  }
-
-  public int reduce(int a, int b) {
-    return a - b;
+    return request instanceof InvocationToHttpServletRequest ? Const.HIGHWAY : 
Const.RESTFUL;
   }
 }
diff --git 
a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/TransportSpringmvcSchema.java
 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/TransportSpringmvcSchema.java
new file mode 100644
index 000000000..51e3eb0d8
--- /dev/null
+++ 
b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/TransportSpringmvcSchema.java
@@ -0,0 +1,34 @@
+/*
+ * 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.it.schema;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.servicecomb.core.Const;
+import 
org.apache.servicecomb.provider.rest.common.InvocationToHttpServletRequest;
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+@RestSchema(schemaId = "transportSpringmvc")
+@RequestMapping(path = "/v1/transportSpringmvc")
+public class TransportSpringmvcSchema {
+  @GetMapping(path = "checkTransport")
+  public String checkTransport(HttpServletRequest request) {
+    return request instanceof InvocationToHttpServletRequest ? Const.HIGHWAY : 
Const.RESTFUL;
+  }
+}
diff --git 
a/integration-tests/springmvc-tests/springmvc-tests-connection-limit/src/test/java/org/apache/servicecomb/demo/springmvc/tests/RawSpringMvcIntegrationTest.java
 
b/integration-tests/springmvc-tests/springmvc-tests-connection-limit/src/test/java/org/apache/servicecomb/demo/springmvc/tests/RawSpringMvcIntegrationTest.java
index e4cd60dca..546274d2b 100644
--- 
a/integration-tests/springmvc-tests/springmvc-tests-connection-limit/src/test/java/org/apache/servicecomb/demo/springmvc/tests/RawSpringMvcIntegrationTest.java
+++ 
b/integration-tests/springmvc-tests/springmvc-tests-connection-limit/src/test/java/org/apache/servicecomb/demo/springmvc/tests/RawSpringMvcIntegrationTest.java
@@ -46,7 +46,7 @@ public static void init() throws Exception {
   @Test
   public void ensureServerWorksFine() {
     try {
-      String result = restTemplate.getForObject(controllerUrl + 
"sayhi?name=world", String.class);
+      restTemplate.getForObject(controllerUrl + "sayhi?name=world", 
String.class);
       fail("connection limit failed");
     } catch (Exception ex) {
       Assert.assertEquals("java.net.SocketException: Unexpected end of file 
from server", ex.getCause().toString());
diff --git 
a/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/RestTemplateCopyHeaderFilter.java
 
b/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/RestTemplateCopyHeaderFilter.java
index 46aef4684..bbead5829 100644
--- 
a/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/RestTemplateCopyHeaderFilter.java
+++ 
b/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/RestTemplateCopyHeaderFilter.java
@@ -43,6 +43,11 @@ public void beforeSendRequest(Invocation invocation, 
HttpServletRequestEx reques
     }
 
     httpHeaders.forEach((key, values) -> {
+      if (HttpHeaders.CONTENT_LENGTH.equalsIgnoreCase(key)) {
+        LOGGER.debug("skip copy content-length into request");
+        return;
+      }
+
       for (String value : values) {
         // null args should not be set to requestEx to avoid 
NullPointerException in Netty.
         if (null == value) {
diff --git 
a/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/TestRestTemplateCopyHeaderFilter.java
 
b/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/TestRestTemplateCopyHeaderFilter.java
index ae6cb8138..5e25daec3 100644
--- 
a/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/TestRestTemplateCopyHeaderFilter.java
+++ 
b/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/TestRestTemplateCopyHeaderFilter.java
@@ -96,6 +96,25 @@ public void beforeSendRequestHaveHeader(@Mocked Invocation 
invocation) {
     Assert.assertThat(Collections.list(requestEx.getHeaders("name")), 
Matchers.contains("value"));
   }
 
+  @Test
+  public void beforeSendRequestSkipContentLength(@Mocked Invocation 
invocation) {
+    HttpHeaders httpHeaders = new HttpHeaders();
+    httpHeaders.add(HttpHeaders.CONTENT_LENGTH, "0");
+
+    Map<String, Object> context = new HashMap<>();
+    context.put(RestConst.CONSUMER_HEADER, httpHeaders);
+    new Expectations() {
+      {
+        invocation.getHandlerContext();
+        result = context;
+      }
+    };
+
+    HttpServletRequestEx requestEx = new CommonToHttpServletRequest(null, 
null, new HttpHeaders(), null, false);
+    filter.beforeSendRequest(invocation, requestEx);
+    Assert.assertNull((requestEx.getHeader(HttpHeaders.CONTENT_LENGTH)));
+  }
+
   @Test
   public void afterReceiveResponse() {
     Assert.assertNull(filter.afterReceiveResponse(null, null));
diff --git 
a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java
 
b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java
index 033947156..6e880faa2 100644
--- 
a/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java
+++ 
b/service-registry/src/main/java/org/apache/servicecomb/serviceregistry/registry/AbstractServiceRegistry.java
@@ -33,7 +33,6 @@
 import org.apache.servicecomb.serviceregistry.api.registry.Microservice;
 import org.apache.servicecomb.serviceregistry.api.registry.MicroserviceFactory;
 import 
org.apache.servicecomb.serviceregistry.api.registry.MicroserviceInstance;
-import org.apache.servicecomb.serviceregistry.api.registry.ServiceCenterInfo;
 import org.apache.servicecomb.serviceregistry.cache.InstanceCacheManager;
 import org.apache.servicecomb.serviceregistry.cache.InstanceCacheManagerNew;
 import org.apache.servicecomb.serviceregistry.client.IpPortManager;
@@ -244,7 +243,7 @@ public MicroserviceInstances findServiceInstances(String 
appId, String serviceNa
     if (microserviceInstances.isMicroserviceNotExist()) {
       return microserviceInstances;
     }
-    
+
     if (!microserviceInstances.isNeedRefresh()) {
       LOGGER.debug("instances revision is not changed, service={}/{}/{}", 
appId, serviceName, versionRule);
       return microserviceInstances;
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/OperationGenerator.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/OperationGenerator.java
index 376a1b316..560e3aa34 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/OperationGenerator.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/OperationGenerator.java
@@ -299,7 +299,7 @@ private boolean isArgumentNotProcessed(int 
swaggerParamCount) {
     return swaggerParamCount == providerParameters.size();
   }
 
-  @SuppressWarnings({"rawtypes", "unckecked"})
+  @SuppressWarnings({"rawtypes"})
   protected void processByParameterAnnotation(Annotation[] paramAnnotations, 
int paramIdx, Type parameterType) {
     String defaultValue = null;
     Parameter parameter = null;


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


> split mixed integration test case
> ---------------------------------
>
>                 Key: SCB-882
>                 URL: https://issues.apache.org/jira/browse/SCB-882
>             Project: Apache ServiceComb
>          Issue Type: Task
>          Components: Java-Chassis
>            Reporter: wujimin
>            Assignee: wujimin
>            Priority: Major
>             Fix For: java-chassis-1.1.0
>
>




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to