You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2020/01/19 00:46:44 UTC

[servicecomb-java-chassis] branch master updated: [SCB-1713]Invocation carries both invocation arguments and swagger arguments and fix implicit parameter problems

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

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


The following commit(s) were added to refs/heads/master by this push:
     new a3b2a80  [SCB-1713]Invocation carries both invocation arguments and swagger arguments and fix implicit parameter problems
a3b2a80 is described below

commit a3b2a8051ea462ea89841b38b1c7dea0d4198e21
Author: liubao <bi...@qq.com>
AuthorDate: Fri Jan 17 17:48:59 2020 +0800

    [SCB-1713]Invocation carries both invocation arguments and swagger arguments and fix implicit parameter problems
---
 .../rest/filter/inner/ClientRestArgsFilter.java    | 15 +----
 .../rest/filter/inner/ServerRestArgsFilter.java    | 10 +--
 .../org/apache/servicecomb/core/Invocation.java    | 78 +++++++++++++++++-----
 .../servicecomb/core/definition/OperationMeta.java | 29 --------
 .../core/invocation/InvocationFactory.java         | 12 ++--
 .../core/provider/consumer/InvokerUtils.java       |  8 +--
 .../servicecomb/demo/pojo/client/TestWeakPojo.java |  4 +-
 .../client/CodeFirstRestTemplateSpringmvc.java     | 33 +++++++--
 .../demo/springmvc/client/SpringmvcClient.java     |  2 +-
 .../TestRSAProviderTokenManager.java               |  2 +-
 .../router/custom/RouterServerListFilter.java      |  2 +-
 .../it/edge/filter/CheckRawFormParamFilter.java    |  2 +-
 .../apache/servicecomb/provider/pojo/Invoker.java  |  4 +-
 .../common/InvocationToHttpServletRequest.java     | 14 ++--
 .../common/TestInvocationToHttpServletRequest.java |  4 --
 .../springmvc/reference/CseClientHttpRequest.java  | 12 ++--
 .../reference/async/CseAsyncClientHttpRequest.java |  8 +--
 .../reference/TestCseClientHttpRequest.java        |  4 +-
 .../async/CseAsyncClientHttpRequestTest.java       |  2 +-
 .../swagger/engine/SwaggerProducerOperation.java   | 53 +--------------
 .../arguments/AbstractArgumentsMapperCreator.java  | 15 +++++
 .../consumer/ConsumerArgumentsMapperCreator.java   |  8 +++
 .../producer/ProducerArgumentsMapperCreator.java   |  6 ++
 .../engine/TestSwaggerProducerOperation.java       |  2 +-
 .../transport/highway/HighwayCodec.java            | 35 ++--------
 .../transport/highway/TestHighwayCodec.java        |  2 +-
 .../rest/client/http/RestClientInvocation.java     |  2 +-
 27 files changed, 172 insertions(+), 196 deletions(-)

diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/ClientRestArgsFilter.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/ClientRestArgsFilter.java
index 1c4e3eb..8babd97 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/ClientRestArgsFilter.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/ClientRestArgsFilter.java
@@ -44,19 +44,8 @@ public class ClientRestArgsFilter implements HttpClientFilter {
     OperationMeta operationMeta = invocation.getOperationMeta();
     RestOperationMeta swaggerRestOperation = operationMeta.getExtData(RestConst.SWAGGER_REST_OPERATION);
     try {
-      // POJO invoker for client
-      if (swaggerRestOperation.getOperationMeta().getSwaggerConsumerOperation() != null && !invocation.isEdge()
-          && !invocation.isWeakInvoke()) {
-        RestCodec
-            .argsToRest(swaggerRestOperation.getOperationMeta().getSwaggerConsumerOperation().getArgumentsMapper()
-                    .invocationArgumentToSwaggerArguments(invocation,
-                        invocation.getArguments()), swaggerRestOperation,
-                restClientRequest);
-      } else {
-        // RestTemplate invoker for client
-        RestCodec.argsToRest(invocation.getArguments(), swaggerRestOperation,
-            restClientRequest);
-      }
+      RestCodec.argsToRest(invocation.getSwaggerArguments(), swaggerRestOperation,
+          restClientRequest);
       requestEx.setBodyBuffer(restClientRequest.getBodyBuffer());
     } catch (Throwable e) {
       throw ExceptionFactory.convertConsumerException(e);
diff --git a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/ServerRestArgsFilter.java b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/ServerRestArgsFilter.java
index bbb4bb7..8464a63 100644
--- a/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/ServerRestArgsFilter.java
+++ b/common/common-rest/src/main/java/org/apache/servicecomb/common/rest/filter/inner/ServerRestArgsFilter.java
@@ -59,14 +59,8 @@ public class ServerRestArgsFilter implements HttpServerFilter {
   public Response afterReceiveRequest(Invocation invocation, HttpServletRequestEx requestEx) {
     OperationMeta operationMeta = invocation.getOperationMeta();
     RestOperationMeta restOperationMeta = operationMeta.getExtData(RestConst.SWAGGER_REST_OPERATION);
-    Map<String, Object> args = RestCodec.restToArgs(requestEx, restOperationMeta);
-    if (restOperationMeta.getOperationMeta().getSwaggerProducerOperation() != null && !invocation.isEdge()) {
-      invocation.setArguments(restOperationMeta.getOperationMeta().getSwaggerProducerOperation().getArgumentsMapper()
-          .swaggerArgumentToInvocationArguments(invocation, args));
-    } else {
-      // edge
-      invocation.setArguments(args);
-    }
+    Map<String, Object> swaggerArguments = RestCodec.restToArgs(requestEx, restOperationMeta);
+    invocation.setSwaggerArguments(swaggerArguments);
     return null;
   }
 
diff --git a/core/src/main/java/org/apache/servicecomb/core/Invocation.java b/core/src/main/java/org/apache/servicecomb/core/Invocation.java
index 131e514..6b81b9a 100644
--- a/core/src/main/java/org/apache/servicecomb/core/Invocation.java
+++ b/core/src/main/java/org/apache/servicecomb/core/Invocation.java
@@ -19,6 +19,7 @@ package org.apache.servicecomb.core;
 
 import java.lang.reflect.Method;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -101,7 +102,9 @@ public class Invocation extends SwaggerInvocation {
 
   private long invocationId;
 
-  private Map<String, Object> arguments;
+  private Map<String, Object> invocationArguments = Collections.emptyMap();
+
+  private Map<String, Object> swaggerArguments = Collections.emptyMap();
 
   public long getInvocationId() {
     return invocationId;
@@ -137,24 +140,25 @@ public class Invocation extends SwaggerInvocation {
     // An empty invocation, used to mock or some other scenario do not need operation information.
   }
 
-  public Invocation(ReferenceConfig referenceConfig, OperationMeta operationMeta, Map<String, Object> arguments) {
+  public Invocation(ReferenceConfig referenceConfig, OperationMeta operationMeta,
+      Map<String, Object> swaggerArguments) {
     this.invocationType = InvocationType.CONSUMER;
     this.referenceConfig = referenceConfig;
     this.responsesMeta = operationMeta.getResponsesMeta();
-    init(operationMeta, arguments);
+    init(operationMeta, swaggerArguments);
   }
 
-  public Invocation(Endpoint endpoint, OperationMeta operationMeta, Map<String, Object> arguments) {
+  public Invocation(Endpoint endpoint, OperationMeta operationMeta, Map<String, Object> swaggerArguments) {
     this.invocationType = InvocationType.PRODUCER;
     this.endpoint = endpoint;
-    init(operationMeta, arguments);
+    init(operationMeta, swaggerArguments);
   }
 
-  private void init(OperationMeta operationMeta, Map<String, Object> arguments) {
+  private void init(OperationMeta operationMeta, Map<String, Object> swaggerArguments) {
     this.invocationId = INVOCATION_ID.getAndIncrement();
     this.schemaMeta = operationMeta.getSchemaMeta();
     this.operationMeta = operationMeta;
-    this.arguments = arguments;
+    this.setSwaggerArguments(swaggerArguments);
     this.handlerList = getHandlerChain();
     handlerIndex = 0;
   }
@@ -188,21 +192,63 @@ public class Invocation extends SwaggerInvocation {
     return operationMeta;
   }
 
-  public Map<String, Object> getArguments() {
-    return this.arguments;
+  public Map<String, Object> getInvocationArguments() {
+    return this.invocationArguments;
+  }
+
+  public Map<String, Object> getSwaggerArguments() {
+    return this.swaggerArguments;
+  }
+
+  public Object getInvocationArgument(String name) {
+    return this.invocationArguments.get(name);
+  }
+
+  public Object getSwaggerArgument(String name) {
+    return this.swaggerArguments.get(name);
+  }
+
+  public void setInvocationArguments(Map<String, Object> invocationArguments) {
+    if (invocationArguments == null) {
+      // Empty arguments
+      this.invocationArguments = new HashMap<>(0);
+      return;
+    }
+    this.invocationArguments = invocationArguments;
+
+    buildSwaggerArguments();
   }
 
-  public Object getArgument(String name) {
-    return this.arguments.get(name);
+  private void buildSwaggerArguments() {
+    if (operationMeta.getSwaggerConsumerOperation() != null && !isEdge()
+        && !isWeakInvoke()) {
+      this.swaggerArguments = operationMeta.getSwaggerConsumerOperation().getArgumentsMapper()
+          .invocationArgumentToSwaggerArguments(this,
+              this.invocationArguments);
+    } else {
+      this.swaggerArguments = invocationArguments;
+    }
   }
 
-  public void setArguments(Map<String, Object> arguments) {
-    if (arguments == null) {
+  public void setSwaggerArguments(Map<String, Object> swaggerArguments) {
+    if (swaggerArguments == null) {
       // Empty arguments
-      this.arguments = new HashMap<>(0);
+      this.swaggerArguments = new HashMap<>(0);
       return;
     }
-    this.arguments = arguments;
+    this.swaggerArguments = swaggerArguments;
+
+    buildInvocationArguments();
+  }
+
+  private void buildInvocationArguments() {
+    if (operationMeta.getSwaggerProducerOperation() != null && !isEdge()) {
+      this.invocationArguments = operationMeta.getSwaggerProducerOperation().getArgumentsMapper()
+          .swaggerArgumentToInvocationArguments(this,
+              swaggerArguments);
+    } else {
+      this.invocationArguments = swaggerArguments;
+    }
   }
 
   // TODO: WEAK add release notes to tell this change in 2.0.0
@@ -210,7 +256,7 @@ public class Invocation extends SwaggerInvocation {
     Method method = operationMeta.getSwaggerProducerOperation().getProducerMethod();
     Object[] args = new Object[method.getParameterCount()];
     for (int i = 0; i < method.getParameterCount(); i++) {
-      args[i] = this.arguments.get(method.getParameters()[i].getName());
+      args[i] = this.invocationArguments.get(method.getParameters()[i].getName());
     }
     return args;
   }
diff --git a/core/src/main/java/org/apache/servicecomb/core/definition/OperationMeta.java b/core/src/main/java/org/apache/servicecomb/core/definition/OperationMeta.java
index f735afd..e138da9 100644
--- a/core/src/main/java/org/apache/servicecomb/core/definition/OperationMeta.java
+++ b/core/src/main/java/org/apache/servicecomb/core/definition/OperationMeta.java
@@ -16,8 +16,6 @@
  */
 package org.apache.servicecomb.core.definition;
 
-import java.util.HashMap;
-import java.util.Map;
 import java.util.concurrent.Executor;
 
 import org.apache.servicecomb.core.Const;
@@ -28,9 +26,6 @@ import org.apache.servicecomb.swagger.engine.SwaggerProducerOperation;
 import org.apache.servicecomb.swagger.generator.core.model.SwaggerOperation;
 import org.apache.servicecomb.swagger.invocation.response.ResponsesMeta;
 
-import com.fasterxml.jackson.databind.JavaType;
-import com.fasterxml.jackson.databind.type.TypeFactory;
-
 import io.swagger.models.Operation;
 
 public class OperationMeta {
@@ -48,8 +43,6 @@ public class OperationMeta {
 
   private Operation swaggerOperation;
 
-  private Map<String, JavaType> argumentsTypes = new HashMap<>();
-
   // run in this executor
   private Executor executor;
 
@@ -74,31 +67,9 @@ public class OperationMeta {
     return this;
   }
 
-  private void buildArgumentsTypes() {
-    this.argumentsTypes.clear();
-    if (getSwaggerProducerOperation() != null) {
-      SwaggerProducerOperation swaggerProducerOperation = getSwaggerProducerOperation();
-      swaggerProducerOperation.getMethodParameterTypesBySwaggerName().forEach((k, v) -> {
-        this.argumentsTypes.put(k, TypeFactory.defaultInstance().constructType(v));
-      });
-    }
-  }
-
-  public JavaType getArgumentType(String name) {
-    return this.argumentsTypes.get(name) == null ? TypeFactory.defaultInstance().constructType(Object.class)
-        : this.argumentsTypes.get(name);
-  }
-
-  public boolean isPojoWrappedArguments(String name) {
-    if (this.getSwaggerProducerOperation() != null) {
-      return this.getSwaggerProducerOperation().isPojoWrappedArguments(name);
-    }
-    return false;
-  }
 
   public void setSwaggerProducerOperation(SwaggerProducerOperation swaggerProducerOperation) {
     this.putExtData(Const.PRODUCER_OPERATION, swaggerProducerOperation);
-    buildArgumentsTypes();
   }
 
   public SwaggerProducerOperation getSwaggerProducerOperation() {
diff --git a/core/src/main/java/org/apache/servicecomb/core/invocation/InvocationFactory.java b/core/src/main/java/org/apache/servicecomb/core/invocation/InvocationFactory.java
index 53229b0..1e6d6b7 100644
--- a/core/src/main/java/org/apache/servicecomb/core/invocation/InvocationFactory.java
+++ b/core/src/main/java/org/apache/servicecomb/core/invocation/InvocationFactory.java
@@ -37,10 +37,10 @@ public final class InvocationFactory {
   }
 
   public static Invocation forConsumer(ReferenceConfig referenceConfig, OperationMeta operationMeta,
-      Map<String, Object> arguments) {
+      Map<String, Object> swaggerArguments) {
     Invocation invocation = new Invocation(referenceConfig,
         operationMeta,
-        arguments);
+        swaggerArguments);
     invocation.addContext(Const.SRC_MICROSERVICE, getMicroserviceName());
     return invocation;
   }
@@ -49,9 +49,9 @@ public final class InvocationFactory {
    * consumer端使用,schemaMeta级别的缓存,每次调用根据operationName来执行
    */
   public static Invocation forConsumer(ReferenceConfig referenceConfig, SchemaMeta schemaMeta, String operationId,
-      Map<String, Object> arguments) {
+      Map<String, Object> swaggerArguments) {
     OperationMeta operationMeta = schemaMeta.ensureFindOperation(operationId);
-    return forConsumer(referenceConfig, operationMeta, arguments);
+    return forConsumer(referenceConfig, operationMeta, swaggerArguments);
   }
 
   /*
@@ -59,10 +59,10 @@ public final class InvocationFactory {
    */
   public static Invocation forProvider(Endpoint endpoint,
       OperationMeta operationMeta,
-      Map<String, Object> arguments) {
+      Map<String, Object> swaggerArguments) {
     SCBEngine.getInstance().ensureStatusUp();
     return new Invocation(endpoint,
         operationMeta,
-        arguments);
+        swaggerArguments);
   }
 }
diff --git a/core/src/main/java/org/apache/servicecomb/core/provider/consumer/InvokerUtils.java b/core/src/main/java/org/apache/servicecomb/core/provider/consumer/InvokerUtils.java
index dc2a895..9e0b976 100644
--- a/core/src/main/java/org/apache/servicecomb/core/provider/consumer/InvokerUtils.java
+++ b/core/src/main/java/org/apache/servicecomb/core/provider/consumer/InvokerUtils.java
@@ -37,12 +37,12 @@ public final class InvokerUtils {
   private static final Logger LOGGER = LoggerFactory.getLogger(InvokerUtils.class);
 
   public static Object syncInvoke(String microserviceName, String schemaId, String operationId,
-      Map<String, Object> args) {
-    return syncInvoke(microserviceName, null, null, schemaId, operationId, args);
+      Map<String, Object> swaggerArguments) {
+    return syncInvoke(microserviceName, null, null, schemaId, operationId, swaggerArguments);
   }
 
   public static Object syncInvoke(String microserviceName, String microserviceVersion, String transport,
-      String schemaId, String operationId, Map<String, Object> args) {
+      String schemaId, String operationId, Map<String, Object> swaggerArguments) {
     MicroserviceReferenceConfig microserviceReferenceConfig = SCBEngine.getInstance()
         .createMicroserviceReferenceConfig(microserviceName, microserviceVersion);
     MicroserviceMeta microserviceMeta = microserviceReferenceConfig.getLatestMicroserviceMeta();
@@ -50,7 +50,7 @@ public final class InvokerUtils {
     OperationMeta operationMeta = schemaMeta.ensureFindOperation(operationId);
 
     ReferenceConfig referenceConfig = microserviceReferenceConfig.createReferenceConfig(transport, operationMeta);
-    Invocation invocation = InvocationFactory.forConsumer(referenceConfig, operationMeta, args);
+    Invocation invocation = InvocationFactory.forConsumer(referenceConfig, operationMeta, swaggerArguments);
     return syncInvoke(invocation);
   }
 
diff --git a/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/TestWeakPojo.java b/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/TestWeakPojo.java
index a28c71f..d324463 100644
--- a/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/TestWeakPojo.java
+++ b/demo/demo-pojo/pojo-client/src/main/java/org/apache/servicecomb/demo/pojo/client/TestWeakPojo.java
@@ -174,6 +174,8 @@ public class TestWeakPojo implements CategorizedTestCase {
     Map<String, Object> args = new HashMap<>();
     args.put("x", 2);
     args.put("y", 3);
-    TestMgr.check(7, InvokerUtils.syncInvoke("pojo", "WeakPojo", "differentName", args));
+    Map<String, Object> swaggerArgs = new HashMap<>();
+    swaggerArgs.put("differentNameBody", args);
+    TestMgr.check(7, InvokerUtils.syncInvoke("pojo", "WeakPojo", "differentName", swaggerArgs));
   }
 }
diff --git a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CodeFirstRestTemplateSpringmvc.java b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CodeFirstRestTemplateSpringmvc.java
index bc4998d..563fcdf 100644
--- a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CodeFirstRestTemplateSpringmvc.java
+++ b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CodeFirstRestTemplateSpringmvc.java
@@ -83,7 +83,7 @@ public class CodeFirstRestTemplateSpringmvc extends CodeFirstRestTemplate {
       throw new IllegalStateException(e);
     }
     testResponseEntity("springmvc", template, cseUrlPrefix);
-    testCodeFirstTestForm(template, cseUrlPrefix);
+    testCodeFirstTestFormRest(template, cseUrlPrefix);
     testFallback(template, cseUrlPrefix);
 
     testResponse.runRest();
@@ -100,7 +100,7 @@ public class CodeFirstRestTemplateSpringmvc extends CodeFirstRestTemplate {
     testResponse.runHighway();
     testObject.runHighway();
     testGeneric.runHighway();
-
+    testCodeFirstTestFormHighway(template, cseUrlPrefix);
     super.testOnlyHighway(template, cseUrlPrefix);
   }
 
@@ -111,9 +111,9 @@ public class CodeFirstRestTemplateSpringmvc extends CodeFirstRestTemplate {
     testGeneric.runAllTransport();
     testRestTemplate.runAllTest();
     testBizkeeper.runAllTest();
-    // TODO : WEAK not supported now in HIGHWAY
     testResponseEntity("springmvc", template, cseUrlPrefix);
-//    testCodeFirstTestForm(template, cseUrlPrefix);
+    testCodeFirstTestForm(template, cseUrlPrefix);
+    // TODO : WEAK not supported now in HIGHWAY
 //    testFallback(template, cseUrlPrefix);
 
     super.testAllTransport(microserviceName, template, cseUrlPrefix);
@@ -248,7 +248,32 @@ public class CodeFirstRestTemplateSpringmvc extends CodeFirstRestTemplate {
     HttpEntity<Map<String, String>> formEntiry = new HttpEntity<>(map, formHeaders);
     TestMgr.check(code + "null",
         template.postForEntity(cseUrlPrefix + "/testform", formEntiry, String.class).getBody());
+    map.put("form2", "hello");
+    TestMgr.check(code + "hello", template.postForEntity(cseUrlPrefix + "/testform", formEntiry, String.class).getBody());
+  }
+
+  private void testCodeFirstTestFormHighway(RestTemplate template, String cseUrlPrefix) {
+    HttpHeaders formHeaders = new HttpHeaders();
+    formHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+    Map<String, String> map = new HashMap<>();
+    String code = "servicecomb%2bwelcome%40%23%24%25%5e%26*()%3d%3d";
+    map.put("form1", code);
     map.put("form2", "");
+    HttpEntity<Map<String, String>> formEntiry = new HttpEntity<>(map, formHeaders);
+    // Highway will not distinguish empty string or null
+    TestMgr
+        .check(code + "null", template.postForEntity(cseUrlPrefix + "/testform", formEntiry, String.class).getBody());
+  }
+
+  private void testCodeFirstTestFormRest(RestTemplate template, String cseUrlPrefix) {
+    HttpHeaders formHeaders = new HttpHeaders();
+    formHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+    Map<String, String> map = new HashMap<>();
+    String code = "servicecomb%2bwelcome%40%23%24%25%5e%26*()%3d%3d";
+    map.put("form1", code);
+    map.put("form2", "");
+    HttpEntity<Map<String, String>> formEntiry = new HttpEntity<>(map, formHeaders);
+    // Rest will have empty string, but users will try to avoid depend on this, This is different from highway
     TestMgr.check(code + "", template.postForEntity(cseUrlPrefix + "/testform", formEntiry, String.class).getBody());
   }
 }
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 829a0dc..8ecfadf 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
@@ -68,7 +68,7 @@ public class SpringmvcClient {
       TestMgr.check("success", "failed");
       LOGGER.error("-------------- test failed -------------");
       LOGGER.error("", e);
-      System.err.println("-------------- test failed -------------");
+      LOGGER.error("-------------- test failed -------------");
     }
     TestMgr.summary();
   }
diff --git a/handlers/handler-publickey-auth/src/test/java/org/apache/servicecomb/authentication/TestRSAProviderTokenManager.java b/handlers/handler-publickey-auth/src/test/java/org/apache/servicecomb/authentication/TestRSAProviderTokenManager.java
index 9e3efcc..bd9c456 100644
--- a/handlers/handler-publickey-auth/src/test/java/org/apache/servicecomb/authentication/TestRSAProviderTokenManager.java
+++ b/handlers/handler-publickey-auth/src/test/java/org/apache/servicecomb/authentication/TestRSAProviderTokenManager.java
@@ -83,7 +83,7 @@ public class TestRSAProviderTokenManager {
 
         RSAProviderTokenManager.getValidatedToken();
         result = CacheBuilder.newBuilder()
-            .expireAfterAccess(1000, TimeUnit.MILLISECONDS)
+            .expireAfterAccess(500, TimeUnit.MILLISECONDS)
             .build();
       }
     };
diff --git a/handlers/handler-router/src/main/java/org/apache/servicecomb/router/custom/RouterServerListFilter.java b/handlers/handler-router/src/main/java/org/apache/servicecomb/router/custom/RouterServerListFilter.java
index 1009476..e8b733e 100644
--- a/handlers/handler-router/src/main/java/org/apache/servicecomb/router/custom/RouterServerListFilter.java
+++ b/handlers/handler-router/src/main/java/org/apache/servicecomb/router/custom/RouterServerListFilter.java
@@ -91,7 +91,7 @@ public class RouterServerListFilter implements ServerListFilterExt {
         headers.putAll(canaryContext);
       }
     }
-    invocation.getArguments().forEach((k, v) -> headers.put(k, v == null ? null : v.toString()));
+    invocation.getInvocationArguments().forEach((k, v) -> headers.put(k, v == null ? null : v.toString()));
     headers.putAll(invocation.getContext());
     return headers;
   }
diff --git a/integration-tests/it-edge/src/main/java/org/apache/servicecomb/it/edge/filter/CheckRawFormParamFilter.java b/integration-tests/it-edge/src/main/java/org/apache/servicecomb/it/edge/filter/CheckRawFormParamFilter.java
index e5bc80a..e4ff4dc 100644
--- a/integration-tests/it-edge/src/main/java/org/apache/servicecomb/it/edge/filter/CheckRawFormParamFilter.java
+++ b/integration-tests/it-edge/src/main/java/org/apache/servicecomb/it/edge/filter/CheckRawFormParamFilter.java
@@ -43,7 +43,7 @@ public class CheckRawFormParamFilter implements HttpServerFilter {
     if (!"paramCodec.stringUrlencodedForm".equals(invocation.getOperationMeta().getSchemaQualifiedName())) {
       return null;
     }
-    final Object swaggerArgument = invocation.getArgument("requestMap");
+    final Object swaggerArgument = invocation.getInvocationArgument("requestMap");
 
     if (!(swaggerArgument instanceof Map)) {
       return Response.failResp(new InvocationException(Status.BAD_REQUEST, "param is not map"));
diff --git a/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/Invoker.java b/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/Invoker.java
index d7f8d9e..2166280 100644
--- a/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/Invoker.java
+++ b/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/Invoker.java
@@ -167,7 +167,9 @@ public class Invoker implements InvocationHandler {
         operationMeta,
         null);
     invocation.setResponsesMeta(pojoConsumerOperationMeta.getResponsesMeta());
-    invocation.setArguments(toArguments(method, args));
+    Map<String, Object> invocationArguments = toArguments(method, args);
+
+    invocation.setInvocationArguments(invocationArguments);
 
     if (CompletableFuture.class.equals(method.getReturnType())) {
       return completableFutureInvoke(invocation, consumerOperation);
diff --git a/providers/provider-rest-common/src/main/java/org/apache/servicecomb/provider/rest/common/InvocationToHttpServletRequest.java b/providers/provider-rest-common/src/main/java/org/apache/servicecomb/provider/rest/common/InvocationToHttpServletRequest.java
index c2f86d7..b98f799 100644
--- a/providers/provider-rest-common/src/main/java/org/apache/servicecomb/provider/rest/common/InvocationToHttpServletRequest.java
+++ b/providers/provider-rest-common/src/main/java/org/apache/servicecomb/provider/rest/common/InvocationToHttpServletRequest.java
@@ -36,14 +36,14 @@ import io.vertx.core.net.SocketAddress;
 public class InvocationToHttpServletRequest extends AbstractHttpServletRequest {
   private RestOperationMeta swaggerOperation;
 
-  private Map<String, Object> args;
-
   private SocketAddress sockerAddress;
 
+  private Invocation invocation;
+
   public InvocationToHttpServletRequest(Invocation invocation) {
     this.swaggerOperation = invocation.getOperationMeta().getExtData(RestConst.SWAGGER_REST_OPERATION);
-    this.args = invocation.getArguments();
     this.sockerAddress = (SocketAddress) invocation.getHandlerContext().get(Const.REMOTE_ADDRESS);
+    this.invocation = invocation;
   }
 
   @Override
@@ -53,7 +53,7 @@ public class InvocationToHttpServletRequest extends AbstractHttpServletRequest {
       return null;
     }
 
-    Object value = param.getValue(args);
+    Object value = param.getValue(invocation.getSwaggerArguments());
     if (value == null) {
       return null;
     }
@@ -68,14 +68,14 @@ public class InvocationToHttpServletRequest extends AbstractHttpServletRequest {
       return null;
     }
 
-    return param.getValueAsStrings(args);
+    return param.getValueAsStrings(invocation.getSwaggerArguments());
   }
 
   @Override
   public Map<String, String[]> getParameterMap() {
     Map<String, String[]> paramMap = new HashMap<>();
     for (RestParam param : swaggerOperation.getParamList()) {
-      String[] value = param.getValueAsStrings(args);
+      String[] value = param.getValueAsStrings(invocation.getSwaggerArguments());
       paramMap.put(param.getParamName(), value);
     }
     return paramMap;
@@ -104,7 +104,7 @@ public class InvocationToHttpServletRequest extends AbstractHttpServletRequest {
   @Override
   public String getPathInfo() {
     try {
-      return this.swaggerOperation.getPathBuilder().createPathString(args);
+      return this.swaggerOperation.getPathBuilder().createPathString(invocation.getSwaggerArguments());
     } catch (Exception e) {
       throw new ServiceCombException("Failed to get path info.", e);
     }
diff --git a/providers/provider-rest-common/src/test/java/org/apache/servicecomb/provider/rest/common/TestInvocationToHttpServletRequest.java b/providers/provider-rest-common/src/test/java/org/apache/servicecomb/provider/rest/common/TestInvocationToHttpServletRequest.java
index 87daa70..13619f4 100644
--- a/providers/provider-rest-common/src/test/java/org/apache/servicecomb/provider/rest/common/TestInvocationToHttpServletRequest.java
+++ b/providers/provider-rest-common/src/test/java/org/apache/servicecomb/provider/rest/common/TestInvocationToHttpServletRequest.java
@@ -73,8 +73,6 @@ public class TestInvocationToHttpServletRequest {
         result = swaggerOperation;
         invocation.getHandlerContext();
         result = handlerContext;
-        invocation.getArguments();
-        result = args;
       }
     };
 
@@ -309,8 +307,6 @@ public class TestInvocationToHttpServletRequest {
         result = operationMeta;
         operationMeta.getExtData(RestConst.SWAGGER_REST_OPERATION);
         result = swaggerOperation;
-        invocation.getArguments();
-        result = args;
         invocation.getHandlerContext();
         result = handlerContext;
       }
diff --git a/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/CseClientHttpRequest.java b/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/CseClientHttpRequest.java
index f0431ae..14b4bfe 100644
--- a/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/CseClientHttpRequest.java
+++ b/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/CseClientHttpRequest.java
@@ -173,10 +173,10 @@ public class CseClientHttpRequest implements ClientHttpRequest {
     QueryStringDecoder queryStringDecoder = new QueryStringDecoder(uri.getRawSchemeSpecificPart());
     queryParams = queryStringDecoder.parameters();
 
-    Map<String, Object> arguments = this.collectArguments();
+    Map<String, Object> swaggerArguments = this.collectArguments();
 
     // 异常流程,直接抛异常出去
-    return this.invoke(arguments);
+    return this.invoke(swaggerArguments);
   }
 
   protected RequestMeta createRequestMeta(String httpMethod, URI uri) {
@@ -207,11 +207,11 @@ public class CseClientHttpRequest implements ClientHttpRequest {
     return uri.getRawPath();
   }
 
-  protected Invocation prepareInvocation(Map<String, Object> arguments) {
+  protected Invocation prepareInvocation(Map<String, Object> swaggerArguments) {
     Invocation invocation =
         InvocationFactory.forConsumer(requestMeta.getReferenceConfig(),
             requestMeta.getOperationMeta(),
-            arguments);
+            swaggerArguments);
 
     invocation.setWeakInvoke(true);
     invocation.getHandlerContext().put(RestConst.REST_CLIENT_REQUEST_PATH,
@@ -234,8 +234,8 @@ public class CseClientHttpRequest implements ClientHttpRequest {
     return invocation;
   }
 
-  private CseClientHttpResponse invoke(Map<String, Object> arguments) {
-    Invocation invocation = prepareInvocation(arguments);
+  private CseClientHttpResponse invoke(Map<String, Object> swaggerArguments) {
+    Invocation invocation = prepareInvocation(swaggerArguments);
     Response response = doInvoke(invocation);
 
     if (response.isSuccessed()) {
diff --git a/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/async/CseAsyncClientHttpRequest.java b/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/async/CseAsyncClientHttpRequest.java
index fc8250b..4082ae4 100644
--- a/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/async/CseAsyncClientHttpRequest.java
+++ b/providers/provider-springmvc/src/main/java/org/apache/servicecomb/provider/springmvc/reference/async/CseAsyncClientHttpRequest.java
@@ -53,8 +53,8 @@ public class CseAsyncClientHttpRequest extends CseClientHttpRequest implements
     return null;
   }
 
-  private ListenableFuture<ClientHttpResponse> invoke(Map<String, Object> args) {
-    Invocation invocation = prepareInvocation(args);
+  private ListenableFuture<ClientHttpResponse> invoke(Map<String, Object> swaggerArguments) {
+    Invocation invocation = prepareInvocation(swaggerArguments);
     invocation.getHandlerContext().put(RestConst.CONSUMER_HEADER, this.getHeaders());
     CompletableFuture<ClientHttpResponse> clientHttpResponseCompletableFuture = doAsyncInvoke(invocation);
     return new CompletableToListenableFutureAdapter<ClientHttpResponse>(clientHttpResponseCompletableFuture);
@@ -79,7 +79,7 @@ public class CseAsyncClientHttpRequest extends CseClientHttpRequest implements
     this.setRequestMeta(createRequestMeta(this.getMethod().name(), this.getURI()));
     QueryStringDecoder queryStringDecoder = new QueryStringDecoder(this.getURI().getRawSchemeSpecificPart());
     this.setQueryParams(queryStringDecoder.parameters());
-    Map<String, Object> args = this.collectArguments();
-    return this.invoke(args);
+    Map<String, Object> swaggerArguments = this.collectArguments();
+    return this.invoke(swaggerArguments);
   }
 }
diff --git a/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/TestCseClientHttpRequest.java b/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/TestCseClientHttpRequest.java
index a09e6d1..a0f932d 100644
--- a/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/TestCseClientHttpRequest.java
+++ b/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/TestCseClientHttpRequest.java
@@ -83,7 +83,7 @@ public class TestCseClientHttpRequest {
 
     client.execute();
 
-    Assert.assertArrayEquals(body, (byte[] )holder.value.getArguments().get("input"));
-    Assert.assertEquals("123", holder.value.getArguments().get("token"));
+    Assert.assertArrayEquals(body, (byte[] )holder.value.getInvocationArguments().get("input"));
+    Assert.assertEquals("123", holder.value.getInvocationArguments().get("token"));
   }
 }
diff --git a/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/async/CseAsyncClientHttpRequestTest.java b/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/async/CseAsyncClientHttpRequestTest.java
index 05e3ad3..9ccbf9c 100644
--- a/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/async/CseAsyncClientHttpRequestTest.java
+++ b/providers/provider-springmvc/src/test/java/org/apache/servicecomb/provider/springmvc/reference/async/CseAsyncClientHttpRequestTest.java
@@ -82,7 +82,7 @@ public class CseAsyncClientHttpRequestTest {
     byte[] body = "abc".getBytes();
     client.setRequestBody(body);
     client.executeAsync();
-    Assert.assertArrayEquals(body, ( byte[])holder.value.getArguments().get("input"));
+    Assert.assertArrayEquals(body, ( byte[])holder.value.getInvocationArguments().get("input"));
   }
 
   @Test
diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerProducerOperation.java b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerProducerOperation.java
index 82c49a6..31c1bdb 100644
--- a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerProducerOperation.java
+++ b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerProducerOperation.java
@@ -17,14 +17,11 @@
 package org.apache.servicecomb.swagger.engine;
 
 import java.lang.reflect.Method;
-import java.lang.reflect.Parameter;
 import java.lang.reflect.Type;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
-import org.apache.servicecomb.swagger.generator.SwaggerGeneratorUtils;
 import org.apache.servicecomb.swagger.generator.core.model.SwaggerOperation;
 import org.apache.servicecomb.swagger.invocation.arguments.producer.ProducerArgumentsMapper;
 import org.apache.servicecomb.swagger.invocation.extension.ProducerInvokeExtension;
@@ -32,8 +29,6 @@ import org.apache.servicecomb.swagger.invocation.response.producer.ProducerRespo
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import io.swagger.models.parameters.BodyParameter;
-
 public class SwaggerProducerOperation {
   private static final Logger LOGGER = LoggerFactory.getLogger(SwaggerProducerOperation.class);
 
@@ -58,8 +53,6 @@ public class SwaggerProducerOperation {
   private List<ProducerInvokeExtension> producerInvokeExtenstionList =
       SPIServiceUtils.getSortedService(ProducerInvokeExtension.class);
 
-  private Map<String, Type> methodParameterTypesBySwaggerName = new HashMap<>();
-
   public String getOperationId() {
     return swaggerOperation.getOperationId();
   }
@@ -86,7 +79,6 @@ public class SwaggerProducerOperation {
 
   public void setProducerMethod(Method producerMethod) {
     this.producerMethod = producerMethod;
-    this.buildMethodSwaggerParameterName();
   }
 
   public SwaggerOperation getSwaggerOperation() {
@@ -126,35 +118,8 @@ public class SwaggerProducerOperation {
     return this.producerInvokeExtenstionList;
   }
 
-  public boolean isPojoWrappedArguments(String name) {
-    List<io.swagger.models.parameters.Parameter> swaggerParameters = this.swaggerOperation.getOperation()
-        .getParameters();
-    io.swagger.models.parameters.Parameter swaggerParameter = findParameterByName(swaggerParameters, name);
-
-    if (swaggerParameter instanceof BodyParameter) {
-      Type methodParameter = findMethodParameterTypesBySwaggerName(name);
-      if (methodParameter == null) {
-        return true;
-      }
-    }
-    return false;
-  }
-
   public Type getSwaggerParameterType(String name) {
-    List<io.swagger.models.parameters.Parameter> swaggerParameters = this.swaggerOperation.getOperation()
-        .getParameters();
-    io.swagger.models.parameters.Parameter swaggerParameter = findParameterByName(swaggerParameters, name);
-
-    Type methodParameterType = findMethodParameterTypesBySwaggerName(name);
-    if (methodParameterType == null) {
-      if (swaggerParameter instanceof BodyParameter) {
-        return Object.class;
-      }
-    } else {
-      return methodParameterType;
-    }
-
-    throw new IllegalStateException("not implemented now, name=" + name);
+    return this.swaggerParameterTypes.get(name);
   }
 
   private static io.swagger.models.parameters.Parameter findParameterByName(
@@ -166,20 +131,4 @@ public class SwaggerProducerOperation {
     }
     throw new IllegalStateException("not found parameter name in swagger, name=" + name);
   }
-
-  private Type findMethodParameterTypesBySwaggerName(String name) {
-    return this.methodParameterTypesBySwaggerName.get(name);
-  }
-
-  public Map<String, Type> getMethodParameterTypesBySwaggerName() {
-    return this.methodParameterTypesBySwaggerName;
-  }
-
-  private void buildMethodSwaggerParameterName() {
-    Parameter[] methodParameters = this.producerMethod.getParameters();
-    for (Parameter parameter : methodParameters) {
-      String name = SwaggerGeneratorUtils.collectParameterName(parameter);
-      this.methodParameterTypesBySwaggerName.put(name, parameter.getParameterizedType());
-    }
-  }
 }
diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/AbstractArgumentsMapperCreator.java b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/AbstractArgumentsMapperCreator.java
index 240be62..0ac0365 100644
--- a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/AbstractArgumentsMapperCreator.java
+++ b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/AbstractArgumentsMapperCreator.java
@@ -20,8 +20,10 @@ import static org.apache.servicecomb.swagger.generator.SwaggerGeneratorUtils.col
 
 import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.servicecomb.swagger.SwaggerUtils;
 import org.apache.servicecomb.swagger.generator.core.model.SwaggerOperation;
@@ -110,6 +112,8 @@ public abstract class AbstractArgumentsMapperCreator {
 
   protected Map<String, Property> swaggerBodyProperties;
 
+  protected Set<String> processedSwaggerParamters;
+
   public AbstractArgumentsMapperCreator(SerializationConfig serializationConfig,
       Map<Class<?>, ContextArgumentMapperFactory> contextFactorys,
       Method providerMethod, SwaggerOperation swaggerOperation) {
@@ -122,6 +126,7 @@ public abstract class AbstractArgumentsMapperCreator {
 
     bodyParameter = findSwaggerBodyParameter();
     swaggerBodyProperties = SwaggerUtils.getBodyProperties(swaggerOperation.getSwagger(), bodyParameter);
+    processedSwaggerParamters = new HashSet<>();
   }
 
   private BodyParameter findSwaggerBodyParameter() {
@@ -157,10 +162,12 @@ public abstract class AbstractArgumentsMapperCreator {
 
       String parameterName = collectParameterName(providerParameter);
       if (processKnownParameter(providerParamIdx, providerParameter, parameterName)) {
+        processedSwaggerParamters.add(parameterName);
         continue;
       }
 
       if (processSwaggerBodyField(providerParamIdx, providerParameter, parameterName)) {
+        processedSwaggerParamters.add(parameterName);
         continue;
       }
 
@@ -172,6 +179,12 @@ public abstract class AbstractArgumentsMapperCreator {
 
       processUnknownParameter(parameterName);
     }
+
+    for (Parameter parameter : swaggerParameters) {
+      if (!processedSwaggerParamters.contains(parameter.getName())) {
+        processPendingSwaggerParameter(parameter);
+      }
+    }
   }
 
   /**
@@ -249,4 +262,6 @@ public abstract class AbstractArgumentsMapperCreator {
   protected abstract void processBeanParameter(int providerParamIdx, java.lang.reflect.Parameter providerParameter);
 
   protected abstract void processUnknownParameter(String parameterName);
+
+  protected abstract void processPendingSwaggerParameter(Parameter parameter);
 }
diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentsMapperCreator.java b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentsMapperCreator.java
index d6c60b8..24bea6a 100644
--- a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentsMapperCreator.java
+++ b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentsMapperCreator.java
@@ -36,6 +36,8 @@ import com.fasterxml.jackson.databind.SerializationConfig;
 import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
 import com.fasterxml.jackson.databind.type.TypeFactory;
 
+import io.swagger.models.parameters.Parameter;
+
 public class ConsumerArgumentsMapperCreator extends AbstractArgumentsMapperCreator {
   private static final Logger LOGGER = LoggerFactory.getLogger(ConsumerArgumentsMapperCreator.class);
 
@@ -81,6 +83,11 @@ public class ConsumerArgumentsMapperCreator extends AbstractArgumentsMapperCreat
   }
 
   @Override
+  protected void processPendingSwaggerParameter(Parameter parameter) {
+
+  }
+
+  @Override
   protected ArgumentMapper createKnownParameterMapper(int consumerParamIdx, Integer swaggerIdx) {
     return new ConsumerArgumentSame(this.providerMethod.getParameters()[consumerParamIdx].getName(),
         this.swaggerParameters.get(swaggerIdx).getName());
@@ -116,6 +123,7 @@ public class ConsumerArgumentsMapperCreator extends AbstractArgumentsMapperCreat
       }
 
       mapper.addField(parameterName, getter);
+      processedSwaggerParamters.add(parameterName);
     }
     mappers.add(mapper);
   }
diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/ProducerArgumentsMapperCreator.java b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/ProducerArgumentsMapperCreator.java
index e7ca773..3b4d33f 100644
--- a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/ProducerArgumentsMapperCreator.java
+++ b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/ProducerArgumentsMapperCreator.java
@@ -68,6 +68,11 @@ public class ProducerArgumentsMapperCreator extends AbstractArgumentsMapperCreat
   }
 
   @Override
+  protected void processPendingSwaggerParameter(io.swagger.models.parameters.Parameter parameter) {
+    swaggerParameterTypes.put(parameter.getName(), Object.class);
+  }
+
+  @Override
   protected ArgumentMapper createKnownParameterMapper(int providerParamIdx, Integer swaggerIdx) {
     String swaggerArgumentName = swaggerParameters.get(swaggerIdx).getName();
     swaggerParameterTypes
@@ -111,6 +116,7 @@ public class ProducerArgumentsMapperCreator extends AbstractArgumentsMapperCreat
 
       swaggerParameterTypes.put(parameterName, propertyDefinition.getPrimaryType());
       mapper.addField(parameterName, setter);
+      processedSwaggerParamters.add(parameterName);
     }
     mappers.add(mapper);
   }
diff --git a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/engine/TestSwaggerProducerOperation.java b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/engine/TestSwaggerProducerOperation.java
index a2473d2..7852436 100644
--- a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/engine/TestSwaggerProducerOperation.java
+++ b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/engine/TestSwaggerProducerOperation.java
@@ -33,7 +33,7 @@ public class TestSwaggerProducerOperation {
 
     SwaggerProducerOperation swaggerProducerOperation = producer.findOperation("testBytes");
     Assert.assertEquals(1, swaggerProducerOperation.getSwaggerOperation().getOperation().getParameters().size());
-    Assert.assertEquals(byte[].class, swaggerProducerOperation.getSwaggerParameterType("bytes"));
+    Assert.assertEquals(Object.class, swaggerProducerOperation.getSwaggerParameterType("bytes"));
 
     swaggerProducerOperation = producer.findOperation("testSimple");
     Assert.assertEquals(1, swaggerProducerOperation.getSwaggerOperation().getOperation().getParameters().size());
diff --git a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayCodec.java b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayCodec.java
index 9db0396..014f2b7 100644
--- a/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayCodec.java
+++ b/transports/transport-highway/src/main/java/org/apache/servicecomb/transport/highway/HighwayCodec.java
@@ -55,37 +55,10 @@ public final class HighwayCodec {
     header.setContext(invocation.getContext());
 
     HighwayOutputStream os = new HighwayOutputStream(msgId);
-    os.write(header, operationProtobuf.getRequestRootSerializer(),
-        invocationArgumentsToSwaggerArguments(invocation, operationProtobuf.getOperationMeta(),
-            invocation.getArguments()));
+    os.write(header, operationProtobuf.getRequestRootSerializer(), invocation.getSwaggerArguments());
     return os;
   }
 
-  private static Map<String, Object> invocationArgumentsToSwaggerArguments(Invocation invocation,
-      OperationMeta operationMeta,
-      Map<String, Object> invocationArguments) {
-    if (operationMeta.getSwaggerConsumerOperation() != null && !invocation.isEdge()
-        && !invocation.isWeakInvoke()) {
-      return operationMeta.getSwaggerConsumerOperation().getArgumentsMapper()
-          .invocationArgumentToSwaggerArguments(invocation,
-              invocation.getArguments());
-    } else {
-      return invocationArguments;
-    }
-  }
-
-  private static Map<String, Object> swaggerArgumentsToInvocationArguments(Invocation invocation,
-      OperationMeta operationMeta,
-      Map<String, Object> swaggerArguments) {
-    if (operationMeta.getSwaggerProducerOperation() != null && !invocation.isEdge()) {
-      return operationMeta.getSwaggerProducerOperation().getArgumentsMapper()
-          .swaggerArgumentToInvocationArguments(invocation,
-              addPrimitiveTypeDefaultValues(invocation, operationMeta, swaggerArguments));
-    } else {
-      return swaggerArguments;
-    }
-  }
-
   @SuppressWarnings({"rawtypes", "unchecked"})
   private static Map<String, Object> addPrimitiveTypeDefaultValues(Invocation invocation, OperationMeta operationMeta,
       Map<String, Object> swaggerArguments) {
@@ -112,9 +85,9 @@ public final class HighwayCodec {
   public static void decodeRequest(Invocation invocation, RequestHeader header, OperationProtobuf operationProtobuf,
       Buffer bodyBuffer) throws Exception {
     RequestRootDeserializer<Object> requestDesirializer = operationProtobuf.getRequestRootDeserializer();
-    Map<String, Object> args = requestDesirializer.deserialize(bodyBuffer.getBytes());
-    invocation
-        .setArguments(swaggerArgumentsToInvocationArguments(invocation, operationProtobuf.getOperationMeta(), args));
+    Map<String, Object> swaggerArguments = requestDesirializer.deserialize(bodyBuffer.getBytes());
+    addPrimitiveTypeDefaultValues(invocation, operationProtobuf.getOperationMeta(), swaggerArguments);
+    invocation.setSwaggerArguments(swaggerArguments);
     invocation.mergeContext(header.getContext());
   }
 
diff --git a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayCodec.java b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayCodec.java
index 0259dde..7635139 100644
--- a/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayCodec.java
+++ b/transports/transport-highway/src/test/java/org/apache/servicecomb/transport/highway/TestHighwayCodec.java
@@ -200,7 +200,7 @@ public class TestHighwayCodec {
     try {
       commonMock();
       Map<String, Object> args = new HashMap<>(0);
-      Mockito.when(invocation.getArguments()).thenReturn(args);
+      Mockito.when(invocation.getInvocationArguments()).thenReturn(args);
       Mockito.when(requestSerializer.serialize(args)).thenReturn(new byte[0]);
       TcpOutputStream os = HighwayCodec.encodeRequest(0, invocation, operationProtobuf);
       Assert.assertNotNull(os);
diff --git a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/http/RestClientInvocation.java b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/http/RestClientInvocation.java
index 91db649..1b62b4e 100644
--- a/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/http/RestClientInvocation.java
+++ b/transports/transport-rest/transport-rest-client/src/main/java/org/apache/servicecomb/transport/rest/client/http/RestClientInvocation.java
@@ -298,7 +298,7 @@ public class RestClientInvocation {
 
     String path = (String) invocation.getHandlerContext().get(RestConst.REST_CLIENT_REQUEST_PATH);
     if (path == null) {
-      path = swaggerRestOperation.getPathBuilder().createRequestPath(invocation.getArguments());
+      path = swaggerRestOperation.getPathBuilder().createRequestPath(invocation.getSwaggerArguments());
     }
 
     if (StringUtils.isEmpty(urlPrefix) || path.startsWith(urlPrefix)) {