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 2019/07/02 02:26:59 UTC
[servicecomb-java-chassis] branch weak-contract-type updated:
[SCB-1342][WIP][WEAK] consumer should not use ArgumentsMapperDirectReuse
when arg index is different
This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch weak-contract-type
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/weak-contract-type by this push:
new 62498aa [SCB-1342][WIP][WEAK] consumer should not use ArgumentsMapperDirectReuse when arg index is different
62498aa is described below
commit 62498aa1e9bd8ee6852b877ce155d040a0bac302
Author: wujimin <wu...@huawei.com>
AuthorDate: Tue Jul 2 00:32:08 2019 +0800
[SCB-1342][WIP][WEAK] consumer should not use ArgumentsMapperDirectReuse when arg index is different
---
.../arguments/consumer/ConsumerArgumentSame.java | 4 +
.../consumer/ConsumerArgumentsMapperCreator.java | 3 +-
.../arguments/consumer/TestJaxrsV1V1.java | 34 +++++++--
.../arguments/consumer/TestPojoOneArg.java | 87 ++++++++++++++++++++++
4 files changed, 121 insertions(+), 7 deletions(-)
diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentSame.java b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentSame.java
index 367c9cc..e6dea39 100644
--- a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentSame.java
+++ b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentSame.java
@@ -30,6 +30,10 @@ public final class ConsumerArgumentSame implements ArgumentMapper {
this.swaggerIdx = swaggerIdx;
}
+ public boolean isSameIndex() {
+ return swaggerIdx == consumerIdx;
+ }
+
@Override
public void mapArgument(SwaggerInvocation invocation, Object[] consumerArguments) {
invocation.setSwaggerArgument(swaggerIdx, consumerArguments[consumerIdx]);
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 15933d5..e5b0cf1 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
@@ -49,7 +49,8 @@ public class ConsumerArgumentsMapperCreator extends AbstractArgumentsMapperCreat
private boolean isAllSameMapper() {
for (ArgumentMapper mapper : mappers) {
- if (mapper instanceof ConsumerArgumentSame) {
+ if (mapper instanceof ConsumerArgumentSame &&
+ ((ConsumerArgumentSame) mapper).isSameIndex()) {
continue;
}
diff --git a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/TestJaxrsV1V1.java b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/TestJaxrsV1V1.java
index 4f5db20..836a42a 100644
--- a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/TestJaxrsV1V1.java
+++ b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/TestJaxrsV1V1.java
@@ -35,7 +35,7 @@ import io.swagger.models.Swagger;
public class TestJaxrsV1V1 {
@Test
- public void add_add() {
+ public void should_mapper_consumer_multi_args_to_swagger_multi_args() {
SwaggerEnvironment environment = new SwaggerEnvironment();
Swagger swagger = SwaggerGenerator.generate(JaxrsAddV1.class);
@@ -52,8 +52,30 @@ public class TestJaxrsV1V1 {
Assert.assertEquals(2, (int) invocation.getSwaggerArgument(1));
}
+ interface ConsumerAddV1_diff_order {
+ int add(int y, int x);
+ }
+
+ @Test
+ public void should_mapper_consumer_multi_args_to_swagger_multi_args_with_diff_order() {
+ SwaggerEnvironment environment = new SwaggerEnvironment();
+ Swagger swagger = SwaggerGenerator.generate(JaxrsAddV1.class);
+
+ SwaggerConsumer swaggerConsumer = environment.createConsumer(ConsumerAddV1_diff_order.class, swagger);
+ ConsumerArgumentsMapper mapper = swaggerConsumer.findOperation("add").getArgumentsMapper();
+
+ Object[] arguments = new Object[] {2, 1};
+ SwaggerInvocation invocation = new SwaggerInvocation();
+
+ mapper.toInvocation(arguments, invocation);
+
+ Assert.assertEquals(2, invocation.getSwaggerArguments().length);
+ Assert.assertEquals(1, (int) invocation.getSwaggerArgument(0));
+ Assert.assertEquals(2, (int) invocation.getSwaggerArgument(1));
+ }
+
@Test
- public void add_addBeanParam() {
+ public void should_mapper_consumer_multi_args_to_swagger_multi_args_gen_by_BeanParam() {
SwaggerEnvironment environment = new SwaggerEnvironment();
Swagger swagger = SwaggerGenerator.generate(JaxrsAddBeanParamV1.class);
@@ -71,7 +93,7 @@ public class TestJaxrsV1V1 {
}
@Test
- public void add_addBody() {
+ public void should_mapper_consumer_multi_args_to_swagger_body() {
SwaggerEnvironment environment = new SwaggerEnvironment();
Swagger swagger = SwaggerGenerator.generate(JaxrsAddBodyV1.class);
@@ -90,7 +112,7 @@ public class TestJaxrsV1V1 {
}
@Test
- public void addBody_add() {
+ public void should_mapper_consumer_wrapped_body_to_swagger_multi_args() {
SwaggerEnvironment environment = new SwaggerEnvironment();
Swagger swagger = SwaggerGenerator.generate(JaxrsAddV1.class);
@@ -108,7 +130,7 @@ public class TestJaxrsV1V1 {
}
@Test
- public void addBody_addBeanParam() {
+ public void should_mapper_consumer_wrapped_body_to_swagger_multi_args_gen_by_BeanParam() {
SwaggerEnvironment environment = new SwaggerEnvironment();
Swagger swagger = SwaggerGenerator.generate(JaxrsAddBeanParamV1.class);
@@ -126,7 +148,7 @@ public class TestJaxrsV1V1 {
}
@Test
- public void addBody_addBody() {
+ public void should_mapper_consumer_body_to_swagger_body() {
SwaggerEnvironment environment = new SwaggerEnvironment();
Swagger swagger = SwaggerGenerator.generate(JaxrsAddBodyV1.class);
SwaggerConsumer swaggerConsumer = environment.createConsumer(ConsumerAddBodyV1.class, swagger);
diff --git a/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/TestPojoOneArg.java b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/TestPojoOneArg.java
new file mode 100644
index 0000000..345017e
--- /dev/null
+++ b/swagger/swagger-invocation/invocation-core/src/test/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/TestPojoOneArg.java
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicecomb.swagger.invocation.arguments.consumer;
+
+import java.util.LinkedHashMap;
+
+import org.apache.servicecomb.foundation.test.scaffolding.model.Color;
+import org.apache.servicecomb.foundation.test.scaffolding.model.User;
+import org.apache.servicecomb.swagger.engine.SwaggerConsumer;
+import org.apache.servicecomb.swagger.engine.SwaggerEnvironment;
+import org.apache.servicecomb.swagger.generator.SwaggerGenerator;
+import org.apache.servicecomb.swagger.invocation.SwaggerInvocation;
+import org.apache.servicecomb.swagger.invocation.schemas.ConsumerOneArg;
+import org.apache.servicecomb.swagger.invocation.schemas.PojoOneArg;
+import org.junit.Assert;
+import org.junit.Test;
+
+import io.swagger.models.Swagger;
+
+public class TestPojoOneArg {
+ @Test
+ public void should_mapper_consumer_simple_to_swagger_body() {
+ SwaggerEnvironment environment = new SwaggerEnvironment();
+ Swagger swagger = SwaggerGenerator.generate(PojoOneArg.class);
+
+ SwaggerConsumer swaggerConsumer = environment.createConsumer(ConsumerOneArg.class, swagger);
+ ConsumerArgumentsMapper mapper = swaggerConsumer.findOperation("simple").getArgumentsMapper();
+
+ Object[] arguments = new Object[] {"name"};
+ SwaggerInvocation invocation = new SwaggerInvocation();
+
+ mapper.toInvocation(arguments, invocation);
+
+ LinkedHashMap<String, Object> map = invocation.getSwaggerArgument(0);
+ Assert.assertEquals(1, map.size());
+ Assert.assertEquals("name", map.get("name"));
+ }
+
+ @Test
+ public void should_mapper_consumer_bean_to_swagger_body() {
+ SwaggerEnvironment environment = new SwaggerEnvironment();
+ Swagger swagger = SwaggerGenerator.generate(PojoOneArg.class);
+
+ SwaggerConsumer swaggerConsumer = environment.createConsumer(ConsumerOneArg.class, swagger);
+ ConsumerArgumentsMapper mapper = swaggerConsumer.findOperation("bean").getArgumentsMapper();
+
+ Object[] arguments = new Object[] {new User()};
+ SwaggerInvocation invocation = new SwaggerInvocation();
+
+ mapper.toInvocation(arguments, invocation);
+
+ Assert.assertEquals(1, invocation.getSwaggerArguments().length);
+ Assert.assertSame(arguments[0], invocation.getSwaggerArgument(0));
+ }
+
+ @Test
+ public void should_mapper_consumer_enum_to_swagger_body_field() {
+ SwaggerEnvironment environment = new SwaggerEnvironment();
+ Swagger swagger = SwaggerGenerator.generate(PojoOneArg.class);
+
+ SwaggerConsumer swaggerConsumer = environment.createConsumer(ConsumerOneArg.class, swagger);
+ ConsumerArgumentsMapper mapper = swaggerConsumer.findOperation("enumBody").getArgumentsMapper();
+
+ Object[] arguments = new Object[] {Color.BLUE};
+ SwaggerInvocation invocation = new SwaggerInvocation();
+
+ mapper.toInvocation(arguments, invocation);
+
+ LinkedHashMap<String, Object> map = invocation.getSwaggerArgument(0);
+ Assert.assertEquals(1, map.size());
+ Assert.assertEquals(Color.BLUE, map.get("color"));
+ }
+}