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:17 UTC
[servicecomb-java-chassis] 01/02: [SCB-2031] fix the problem in
mapping pojo consumer method to swagger provider operation
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;
}
}