You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by wu...@apache.org on 2020/07/06 13:33:16 UTC

[servicecomb-java-chassis] branch master updated (751a851 -> 0d1af3f)

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

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


    from 751a851  [#2034] move create validator to init to use injected spring bean
     new 51f0c50  [SCB-2031] fix the problem in mapping pojo consumer method to swagger provider operation
     new 0d1af3f  [SCB-2031] optimize code as review opinion

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


Summary of changes:
 .../it/testcase/TestApiOperationOverride.java      | 171 +++++++++++++++++----
 .../it/schema/ApiOperationJaxrsSchema.java         |   4 +-
 .../it/schema/ApiOperationSpringmvcSchema.java     |   5 +-
 .../it/schema/ApiOpertionPojoSchema.java           |   4 +-
 .../apache/servicecomb/provider/pojo/Invoker.java  |   3 +-
 .../provider/pojo/definition/PojoConsumerMeta.java |  20 ++-
 .../swagger/engine/SwaggerConsumer.java            |  22 ++-
 7 files changed, 187 insertions(+), 42 deletions(-)


[servicecomb-java-chassis] 01/02: [SCB-2031] fix the problem in mapping pojo consumer method to swagger provider operation

Posted by wu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 51f0c501d9e6e0522cb7816a6f4dcb706103d4aa
Author: yhs0092 <yh...@163.com>
AuthorDate: Thu Jul 2 20:41:14 2020 +0800

    [SCB-2031] fix the problem in mapping pojo consumer method to swagger provider operation
---
 .../it/testcase/TestApiOperationOverride.java      | 171 +++++++++++++++++----
 .../it/schema/ApiOperationJaxrsSchema.java         |   4 +-
 .../it/schema/ApiOperationSpringmvcSchema.java     |   5 +-
 .../it/schema/ApiOpertionPojoSchema.java           |   4 +-
 .../apache/servicecomb/provider/pojo/Invoker.java  |   3 +-
 .../provider/pojo/definition/PojoConsumerMeta.java |   9 +-
 .../swagger/engine/SwaggerConsumer.java            |   7 +-
 7 files changed, 163 insertions(+), 40 deletions(-)

diff --git a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestApiOperationOverride.java b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestApiOperationOverride.java
index 8fcf1bc..b55c1b1 100644
--- a/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestApiOperationOverride.java
+++ b/integration-tests/it-consumer/src/main/java/org/apache/servicecomb/it/testcase/TestApiOperationOverride.java
@@ -18,18 +18,19 @@ package org.apache.servicecomb.it.testcase;
 
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
+import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.servicecomb.it.Consumers;
 import org.junit.Assert;
 import org.junit.Test;
+import org.springframework.http.ResponseEntity;
 
 import io.swagger.annotations.ApiOperation;
 
 public class TestApiOperationOverride {
   interface OptionalIntf {
-
     @ApiOperation(value = "", nickname = "sayHi")
-    String sayHello();
+    String sayHello(Long index);
 
     @ApiOperation(value = "", nickname = "sayHello")
     String sayHello(String name);
@@ -38,9 +39,23 @@ public class TestApiOperationOverride {
     CompletableFuture<String> sayHelloAsync(String name);
 
     @ApiOperation(value = "", nickname = "sayHi")
-    CompletableFuture<String> sayHelloAsync();
+    CompletableFuture<String> sayHelloAsync(Long index);
+
+    @ApiOperation(value = "", nickname = "sayHi")
+    ResponseEntity<String> sayHelloEntity(Long index);
+
+    @ApiOperation(value = "", nickname = "sayHello")
+    ResponseEntity<String> sayHelloEntity(String name);
+
+    @ApiOperation(value = "", nickname = "sayHi")
+    CompletableFuture<ResponseEntity<String>> sayHelloEntityAsync(Long index);
+
+    @ApiOperation(value = "", nickname = "sayHello")
+    CompletableFuture<ResponseEntity<String>> sayHelloEntityAsync(String name);
   }
 
+  private static AtomicLong indexGenerator = new AtomicLong();
+
   private static Consumers<OptionalIntf> consumersPojo = new Consumers<>("apiOpertionPojoSchemaTest",
       OptionalIntf.class);
 
@@ -51,62 +66,164 @@ public class TestApiOperationOverride {
       OptionalIntf.class);
 
   @Test
-  public void consumersPojo_A_intf() {
-    Assert.assertEquals("ApiOpertionPojoSchema#sayHello", consumersPojo.getIntf().sayHello());
+  public void consumersPojo_sayHi_intf() {
+    long index = generateIndex();
+    Assert.assertEquals("ApiOpertionPojoSchema#sayHello" + index, consumersPojo.getIntf().sayHello(index));
+  }
+
+  @Test
+  public void consumersPojo_sayHello_intf() {
+    long index = generateIndex();
+    Assert.assertEquals("value" + index, consumersPojo.getIntf().sayHello("value" + index));
+  }
+
+  @Test
+  public void consumersPojo_sayHelloAsync_intf() throws ExecutionException, InterruptedException {
+    long index = generateIndex();
+    Assert.assertEquals("value" + index, consumersPojo.getIntf().sayHelloAsync("value" + index).get());
+  }
+
+  @Test
+  public void consumersPojo_sayHiAsync_intf() throws ExecutionException, InterruptedException {
+    long index = generateIndex();
+    Assert.assertEquals("ApiOpertionPojoSchema#sayHello" + index, consumersPojo.getIntf().sayHelloAsync(index).get());
+  }
+
+  @Test
+  public void consumersPojo_sayHiEntity_intf() {
+    long index = generateIndex();
+    Assert.assertEquals("ApiOpertionPojoSchema#sayHello" + index,
+        consumersPojo.getIntf().sayHelloEntity(index).getBody());
+  }
+
+  @Test
+  public void consumersPojo_sayHelloEntity_intf() {
+    long index = generateIndex();
+    Assert.assertEquals("value" + index,
+        consumersPojo.getIntf().sayHelloEntity("value" + index).getBody());
+  }
+
+  @Test
+  public void consumersPojo_sayHiEntityAsync_intf() throws ExecutionException, InterruptedException {
+    long index = generateIndex();
+    Assert.assertEquals("ApiOpertionPojoSchema#sayHello" + index,
+        consumersPojo.getIntf().sayHelloEntityAsync(index).get().getBody());
+  }
+
+  @Test
+  public void consumersPojo_sayHelloEntityAsync_intf() throws ExecutionException, InterruptedException {
+    long index = generateIndex();
+    Assert.assertEquals("value" + index,
+        consumersPojo.getIntf().sayHelloEntityAsync("value" + index).get().getBody());
+  }
+
+  @Test
+  public void consumersJaxrs_sayHi_intf() {
+    long index = generateIndex();
+    Assert.assertEquals("ApiOperationJaxrsSchema#sayHello" + index, consumersJaxrs.getIntf().sayHello(index));
+  }
+
+  @Test
+  public void consumersJaxrs_sayHello_intf() {
+    long index = generateIndex();
+    Assert.assertEquals("value" + index, consumersJaxrs.getIntf().sayHello("value" + index));
+  }
+
+  @Test
+  public void consumersJaxrs_sayHelloAsync_intf() throws ExecutionException, InterruptedException {
+    long index = generateIndex();
+    Assert.assertEquals("value" + index, consumersJaxrs.getIntf().sayHelloAsync("value" + index).get());
+  }
+
+  @Test
+  public void consumersJaxrs_sayHiAsync_intf() throws ExecutionException, InterruptedException {
+    long index = generateIndex();
+    Assert
+        .assertEquals("ApiOperationJaxrsSchema#sayHello" + index, consumersJaxrs.getIntf().sayHelloAsync(index).get());
+  }
+
+  @Test
+  public void consumersJaxrs_sayHiEntity_intf() {
+    long index = generateIndex();
+    Assert.assertEquals("ApiOperationJaxrsSchema#sayHello" + index,
+        consumersJaxrs.getIntf().sayHelloEntity(index).getBody());
   }
 
   @Test
-  public void consumersPojo_B_intf() {
-    Assert.assertEquals("value", consumersPojo.getIntf().sayHello("value"));
+  public void consumersJaxrs_sayHelloEntity_intf() {
+    long index = generateIndex();
+    Assert.assertEquals("value" + index,
+        consumersJaxrs.getIntf().sayHelloEntity("value" + index).getBody());
   }
 
   @Test
-  public void consumersPojo_C_intf() throws ExecutionException, InterruptedException {
-    Assert.assertEquals("value", consumersPojo.getIntf().sayHelloAsync("value").get());
+  public void consumersJaxrs_sayHiEntityAsync_intf() throws ExecutionException, InterruptedException {
+    long index = generateIndex();
+    Assert.assertEquals("ApiOperationJaxrsSchema#sayHello" + index,
+        consumersJaxrs.getIntf().sayHelloEntityAsync(index).get().getBody());
   }
 
   @Test
-  public void consumersPojo_D_intf() throws ExecutionException, InterruptedException {
-    Assert.assertEquals("ApiOpertionPojoSchema#sayHello", consumersPojo.getIntf().sayHelloAsync().get());
+  public void consumersJaxrs_sayHelloEntityAsync_intf() throws ExecutionException, InterruptedException {
+    long index = generateIndex();
+    Assert.assertEquals("value" + index,
+        consumersJaxrs.getIntf().sayHelloEntityAsync("value" + index).get().getBody());
   }
 
   @Test
-  public void consumersJaxrs_A_intf() {
-    Assert.assertEquals("ApiOperationJaxrsSchema#sayHello", consumersJaxrs.getIntf().sayHello());
+  public void consumersSpringmvc_sayHi_intf() {
+    long index = generateIndex();
+    Assert.assertEquals("ApiOperationSpringmvcSchema#sayHello" + index, consumersSpringmvc.getIntf().sayHello(index));
   }
 
   @Test
-  public void consumersJaxrs_B_intf() {
-    Assert.assertEquals("value", consumersJaxrs.getIntf().sayHello("value"));
+  public void consumersSpringmvc_sayHello_intf() {
+    long index = generateIndex();
+    Assert.assertEquals("value" + index, consumersSpringmvc.getIntf().sayHello("value" + index));
   }
 
   @Test
-  public void consumersJaxrs_C_intf() throws ExecutionException, InterruptedException {
-    Assert.assertEquals("value", consumersJaxrs.getIntf().sayHelloAsync("value").get());
+  public void consumersSpringmvc_sayHelloAsync_intf() throws ExecutionException, InterruptedException {
+    long index = generateIndex();
+    Assert.assertEquals("value" + index, consumersSpringmvc.getIntf().sayHelloAsync("value" + index).get());
   }
 
   @Test
-  public void consumersJaxrs_D_intf() throws ExecutionException, InterruptedException {
-    Assert.assertEquals("ApiOperationJaxrsSchema#sayHello", consumersJaxrs.getIntf().sayHelloAsync().get());
+  public void consumersSpringmvc_sayHiAsync_intf() throws ExecutionException, InterruptedException {
+    long index = generateIndex();
+    Assert.assertEquals("ApiOperationSpringmvcSchema#sayHello" + index,
+        consumersSpringmvc.getIntf().sayHelloAsync(index).get());
   }
 
   @Test
-  public void consumersSpringmvc_A_intf() {
-    Assert.assertEquals("ApiOperationSpringmvcSchema#sayHello", consumersSpringmvc.getIntf().sayHello());
+  public void consumersSpringmvc_sayHiEntity_intf() {
+    long index = generateIndex();
+    Assert.assertEquals("ApiOperationSpringmvcSchema#sayHello" + index,
+        consumersSpringmvc.getIntf().sayHelloEntity(index).getBody());
   }
 
   @Test
-  public void consumersSpringmvc_B_intf() {
-    Assert.assertEquals("value", consumersSpringmvc.getIntf().sayHello("value"));
+  public void consumersSpringmvc_sayHelloEntity_intf() {
+    long index = generateIndex();
+    Assert.assertEquals("value" + index,
+        consumersSpringmvc.getIntf().sayHelloEntity("value" + index).getBody());
   }
 
   @Test
-  public void consumersSpringmvc_C_intf() throws ExecutionException, InterruptedException {
-    Assert.assertEquals("value", consumersSpringmvc.getIntf().sayHelloAsync("value").get());
+  public void consumersSpringmvc_sayHiEntityAsync_intf() throws ExecutionException, InterruptedException {
+    long index = generateIndex();
+    Assert.assertEquals("ApiOperationSpringmvcSchema#sayHello" + index,
+        consumersSpringmvc.getIntf().sayHelloEntityAsync(index).get().getBody());
   }
 
   @Test
-  public void consumersSpringmvc_D_intf() throws ExecutionException, InterruptedException {
-    Assert.assertEquals("ApiOperationSpringmvcSchema#sayHello", consumersSpringmvc.getIntf().sayHelloAsync().get());
+  public void consumersSpringmvc_sayHelloEntityAsync_intf() throws ExecutionException, InterruptedException {
+    long index = generateIndex();
+    Assert.assertEquals("value" + index,
+        consumersSpringmvc.getIntf().sayHelloEntityAsync("value" + index).get().getBody());
+  }
+
+  private long generateIndex() {
+    return indexGenerator.getAndIncrement();
   }
 }
diff --git a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/ApiOperationJaxrsSchema.java b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/ApiOperationJaxrsSchema.java
index a0050be..35bb3c4 100644
--- a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/ApiOperationJaxrsSchema.java
+++ b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/ApiOperationJaxrsSchema.java
@@ -33,8 +33,8 @@ public class ApiOperationJaxrsSchema {
   @GET
   @Produces("text/plain;charset=UTF-8")
   @ApiOperation(value = "", nickname = "sayHi")
-  public String sayHello() {
-    return "ApiOperationJaxrsSchema#sayHello";
+  public String sayHello(Long index) {
+    return "ApiOperationJaxrsSchema#sayHello" + index;
   }
 
   @Path("/sayHello")
diff --git a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/ApiOperationSpringmvcSchema.java b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/ApiOperationSpringmvcSchema.java
index 9deaa32..1f0a327 100644
--- a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/ApiOperationSpringmvcSchema.java
+++ b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/ApiOperationSpringmvcSchema.java
@@ -19,6 +19,7 @@ package org.apache.servicecomb.it.schema;
 import org.apache.servicecomb.provider.rest.common.RestSchema;
 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.ApiOperation;
 
@@ -28,8 +29,8 @@ public class ApiOperationSpringmvcSchema {
 
   @RequestMapping(path = "/sayHi", method = RequestMethod.GET, produces = "text/plain;charset=UTF-8")
   @ApiOperation(value = "", nickname = "sayHi")
-  public String sayHello() {
-    return "ApiOperationSpringmvcSchema#sayHello";
+  public String sayHello(@RequestParam("index") Long index) {
+    return "ApiOperationSpringmvcSchema#sayHello" + index;
   }
 
   @RequestMapping(path = "/sayHello", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
diff --git a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/ApiOpertionPojoSchema.java b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/ApiOpertionPojoSchema.java
index 61f4979..02ff1b9 100644
--- a/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/ApiOpertionPojoSchema.java
+++ b/integration-tests/it-producer/src/main/java/org/apache/servicecomb/it/schema/ApiOpertionPojoSchema.java
@@ -24,8 +24,8 @@ import io.swagger.annotations.ApiOperation;
 public class ApiOpertionPojoSchema {
 
   @ApiOperation(value = "", nickname = "sayHi")
-  public String sayHello() {
-    return "ApiOpertionPojoSchema#sayHello";
+  public String sayHello(Long index) {
+    return "ApiOpertionPojoSchema#sayHello" + index;
   }
 
   @ApiOperation(value = "", nickname = "sayHello")
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 751e5a8..8f3ff3a 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
@@ -41,7 +41,6 @@ import org.apache.servicecomb.provider.pojo.definition.PojoConsumerMeta;
 import org.apache.servicecomb.provider.pojo.definition.PojoConsumerOperationMeta;
 import org.apache.servicecomb.swagger.engine.SwaggerConsumer;
 import org.apache.servicecomb.swagger.engine.SwaggerConsumerOperation;
-import org.apache.servicecomb.swagger.generator.core.utils.MethodUtils;
 import org.apache.servicecomb.swagger.invocation.Response;
 import org.apache.servicecomb.swagger.invocation.context.InvocationContextCompletableFuture;
 import org.apache.servicecomb.swagger.invocation.exception.ExceptionFactory;
@@ -149,7 +148,7 @@ public class Invoker implements InvocationHandler {
     }
 
     PojoConsumerOperationMeta pojoConsumerOperationMeta = consumerMeta
-        .findOperationMeta(MethodUtils.findSwaggerMethodName(method));
+        .findOperationMeta(method);
     if (pojoConsumerOperationMeta == null) {
       throw new IllegalStateException(
           String.format(
diff --git a/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerMeta.java b/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerMeta.java
index 669698b..502ebe5 100644
--- a/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerMeta.java
+++ b/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerMeta.java
@@ -16,6 +16,7 @@
  */
 package org.apache.servicecomb.provider.pojo.definition;
 
+import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -33,7 +34,7 @@ public class PojoConsumerMeta {
 
   private SchemaMeta schemaMeta;
 
-  private Map<String, PojoConsumerOperationMeta> operationMetas = new HashMap<>();
+  private Map<Method, PojoConsumerOperationMeta> operationMetas = new HashMap<>();
 
   public PojoConsumerMeta(MicroserviceReferenceConfig microserviceReferenceConfig, SwaggerConsumer swaggerConsumer,
       SchemaMeta schemaMeta) {
@@ -53,7 +54,7 @@ public class PojoConsumerMeta {
       PojoConsumerOperationMeta pojoConsumerOperationMeta = new PojoConsumerOperationMeta(this, operationMeta,
           swaggerConsumerOperation, intfSwaggerGenerator.getSwagger(), intfOperationGenerator.getOperation());
 
-      operationMetas.put(swaggerConsumerOperation.getSchemaOperationId(),
+      operationMetas.put(swaggerConsumerOperation.getConsumerMethod(),
           pojoConsumerOperationMeta);
     }
   }
@@ -77,4 +78,8 @@ public class PojoConsumerMeta {
   public PojoConsumerOperationMeta findOperationMeta(String consumerMethodName) {
     return operationMetas.get(consumerMethodName);
   }
+
+  public PojoConsumerOperationMeta findOperationMeta(Method consumerMethod) {
+    return operationMetas.get(consumerMethod);
+  }
 }
diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerConsumer.java b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerConsumer.java
index 681397d..83786e9 100644
--- a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerConsumer.java
+++ b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerConsumer.java
@@ -16,6 +16,7 @@
  */
 package org.apache.servicecomb.swagger.engine;
 
+import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -23,7 +24,7 @@ public class SwaggerConsumer {
   private Class<?> consumerIntf;
 
   // key is consumer method name
-  private Map<String, SwaggerConsumerOperation> operations = new HashMap<>();
+  private Map<Method, SwaggerConsumerOperation> operations = new HashMap<>();
 
   public Class<?> getConsumerIntf() {
     return consumerIntf;
@@ -34,14 +35,14 @@ public class SwaggerConsumer {
   }
 
   public void addOperation(SwaggerConsumerOperation op) {
-    operations.put(op.getSchemaOperationId(), op);
+    operations.put(op.getConsumerMethod(), op);
   }
 
   public SwaggerConsumerOperation findOperation(String consumerMethodName) {
     return operations.get(consumerMethodName);
   }
 
-  public Map<String, SwaggerConsumerOperation> getOperations() {
+  public Map<Method, SwaggerConsumerOperation> getOperations() {
     return operations;
   }
 }


[servicecomb-java-chassis] 02/02: [SCB-2031] optimize code as review opinion

Posted by wu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 0d1af3fce70a442119fe65766f498428132a9d1e
Author: yhs0092 <yh...@163.com>
AuthorDate: Fri Jul 3 09:51:28 2020 +0800

    [SCB-2031] optimize code as review opinion
---
 .../provider/pojo/definition/PojoConsumerMeta.java        | 11 ++++++++++-
 .../servicecomb/swagger/engine/SwaggerConsumer.java       | 15 ++++++++++++++-
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerMeta.java b/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerMeta.java
index 502ebe5..987eebe 100644
--- a/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerMeta.java
+++ b/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerMeta.java
@@ -19,6 +19,7 @@ package org.apache.servicecomb.provider.pojo.definition;
 import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Map.Entry;
 
 import org.apache.servicecomb.core.definition.MicroserviceMeta;
 import org.apache.servicecomb.core.definition.OperationMeta;
@@ -29,6 +30,8 @@ import org.apache.servicecomb.swagger.engine.SwaggerConsumerOperation;
 import org.apache.servicecomb.swagger.generator.OperationGenerator;
 import org.apache.servicecomb.swagger.generator.SwaggerGenerator;
 
+import com.google.common.annotations.VisibleForTesting;
+
 public class PojoConsumerMeta {
   private MicroserviceReferenceConfig microserviceReferenceConfig;
 
@@ -75,8 +78,14 @@ public class PojoConsumerMeta {
     return schemaMeta;
   }
 
+  @VisibleForTesting
   public PojoConsumerOperationMeta findOperationMeta(String consumerMethodName) {
-    return operationMetas.get(consumerMethodName);
+    for (Entry<Method, PojoConsumerOperationMeta> operationMetaEntry : operationMetas.entrySet()) {
+      if (operationMetaEntry.getKey().getName().equals(consumerMethodName)) {
+        return operationMetaEntry.getValue();
+      }
+    }
+    return null;
   }
 
   public PojoConsumerOperationMeta findOperationMeta(Method consumerMethod) {
diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerConsumer.java b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerConsumer.java
index 83786e9..fc6c52d 100644
--- a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerConsumer.java
+++ b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerConsumer.java
@@ -19,6 +19,9 @@ package org.apache.servicecomb.swagger.engine;
 import java.lang.reflect.Method;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Map.Entry;
+
+import com.google.common.annotations.VisibleForTesting;
 
 public class SwaggerConsumer {
   private Class<?> consumerIntf;
@@ -38,8 +41,18 @@ public class SwaggerConsumer {
     operations.put(op.getConsumerMethod(), op);
   }
 
+  @VisibleForTesting
   public SwaggerConsumerOperation findOperation(String consumerMethodName) {
-    return operations.get(consumerMethodName);
+    for (Entry<Method, SwaggerConsumerOperation> operationEntry : operations.entrySet()) {
+      if (operationEntry.getKey().getName().equals(consumerMethodName)) {
+        return operationEntry.getValue();
+      }
+    }
+    return null;
+  }
+
+  public SwaggerConsumerOperation findOperation(Method consumerMethod) {
+    return operations.get(consumerMethod);
   }
 
   public Map<Method, SwaggerConsumerOperation> getOperations() {