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 <yhs0...@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; } }