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/incubator-servicecomb-java-chassis.git

commit 70048b80955cbbb435f434002c5470d44ac85575
Author: yaohaishi <yaohai...@huawei.com>
AuthorDate: Sun Jul 15 17:54:06 2018 +0800

    [SCB-708] add query object IT
---
 .../servicecomb/demo/compute/GenericParam.java     | 63 ++++++++++++++++++++++
 .../demo/compute/GenericParamExtended.java         | 52 ++++++++++++++++++
 .../client/CodeFirstRestTemplateSpringmvc.java     |  1 +
 .../springmvc/client/CodeFirstSpringmvcIntf.java   |  9 ++++
 .../demo/springmvc/client/TestResponse.java        | 30 +++++++++++
 .../demo/springmvc/client/TestRestTemplate.java    | 44 +++++++++++++++
 .../demo/springmvc/server/CodeFirstSpringmvc.java  | 39 +++++++++++++-
 7 files changed, 236 insertions(+), 2 deletions(-)

diff --git 
a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/compute/GenericParam.java
 
b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/compute/GenericParam.java
new file mode 100644
index 0000000..3ec6f17
--- /dev/null
+++ 
b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/compute/GenericParam.java
@@ -0,0 +1,63 @@
+/*
+ * 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.demo.compute;
+
+public class GenericParam<T> {
+  private String str;
+
+  private long num;
+
+  private T data;
+
+  public String getStr() {
+    return str;
+  }
+
+  public GenericParam<T> setStr(String str) {
+    this.str = str;
+    return this;
+  }
+
+  public long getNum() {
+    return num;
+  }
+
+  public GenericParam<T> setNum(long num) {
+    this.num = num;
+    return this;
+  }
+
+  public T getData() {
+    return data;
+  }
+
+  public GenericParam<T> setData(T data) {
+    this.data = data;
+    return this;
+  }
+
+  @Override
+  public String toString() {
+    final StringBuilder sb = new StringBuilder("GenericParam{");
+    sb.append("str='").append(str).append('\'');
+    sb.append(", num=").append(num);
+    sb.append(", data=").append(data);
+    sb.append('}');
+    return sb.toString();
+  }
+}
diff --git 
a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/compute/GenericParamExtended.java
 
b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/compute/GenericParamExtended.java
new file mode 100644
index 0000000..1f97197
--- /dev/null
+++ 
b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/compute/GenericParamExtended.java
@@ -0,0 +1,52 @@
+/*
+ * 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.demo.compute;
+
+public class GenericParamExtended<T> extends GenericParam<T> {
+  private String strExtended;
+
+  private int intExtended;
+
+  public String getStrExtended() {
+    return strExtended;
+  }
+
+  public GenericParamExtended<T> setStrExtended(String strExtended) {
+    this.strExtended = strExtended;
+    return this;
+  }
+
+  public int getIntExtended() {
+    return intExtended;
+  }
+
+  public GenericParamExtended<T> setIntExtended(int intExtended) {
+    this.intExtended = intExtended;
+    return this;
+  }
+
+  @Override
+  public String toString() {
+    final StringBuilder sb = new StringBuilder("GenericParamExtended{");
+    sb.append("strExtended='").append(strExtended).append('\'');
+    sb.append(", intExtended=").append(intExtended);
+    sb.append(", super=").append(super.toString());
+    sb.append('}');
+    return sb.toString();
+  }
+}
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 04f2ec6..2525f87 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
@@ -88,6 +88,7 @@ public class CodeFirstRestTemplateSpringmvc extends 
CodeFirstRestTemplate {
     testResponse.runRest();
     testObject.runRest();
     testGeneric.runRest();
+    testRestTemplate.runRest();
 
     super.testOnlyRest(template, cseUrlPrefix);
   }
diff --git 
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CodeFirstSpringmvcIntf.java
 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CodeFirstSpringmvcIntf.java
index 6fb55e2..cb1824b 100644
--- 
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CodeFirstSpringmvcIntf.java
+++ 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CodeFirstSpringmvcIntf.java
@@ -24,6 +24,8 @@ import javax.xml.ws.Holder;
 
 import org.apache.servicecomb.demo.EmptyObject;
 import org.apache.servicecomb.demo.Generic;
+import org.apache.servicecomb.demo.compute.GenericParam;
+import org.apache.servicecomb.demo.compute.Person;
 import org.apache.servicecomb.demo.server.User;
 import org.apache.servicecomb.swagger.invocation.Response;
 import org.springframework.http.HttpStatus;
@@ -59,4 +61,11 @@ public interface CodeFirstSpringmvcIntf {
   void testvoidInRPC();
 
   Void testVoidInRPC();
+
+  String checkQueryObject(String name, String otherName, Person requestBody);
+
+  String checkQueryGenericObject(GenericParam<Person> requestBody, String str, 
long num);
+
+  String checkQueryGenericString(String str, GenericParam<Person> requestBody, 
long num, String data,
+      String strExtended, int intExtended);
 }
diff --git 
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestResponse.java
 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestResponse.java
index e7f1d4c..2dda35c 100644
--- 
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestResponse.java
+++ 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestResponse.java
@@ -19,6 +19,8 @@ package org.apache.servicecomb.demo.springmvc.client;
 import java.util.Date;
 
 import org.apache.servicecomb.demo.TestMgr;
+import org.apache.servicecomb.demo.compute.GenericParam;
+import org.apache.servicecomb.demo.compute.Person;
 import org.apache.servicecomb.provider.pojo.Invoker;
 import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.apache.servicecomb.swagger.invocation.Response;
@@ -32,6 +34,8 @@ public class TestResponse {
   }
 
   public void runRest() {
+    checkQueryGenericObject();
+    checkQueryGenericString();
   }
 
   public void runHighway() {
@@ -42,6 +46,7 @@ public class TestResponse {
     testCseResponse();
     testvoidResponse();
     testVoidResponse();
+    checkQueryObject();
   }
 
   private void testCseResponse() {
@@ -72,4 +77,29 @@ public class TestResponse {
   private void testVoidResponse() {
     intf.testVoidInRPC();
   }
+
+  private void checkQueryObject() {
+    String result = intf.checkQueryObject("name1", "otherName2", new 
Person("bodyName"));
+    
TestMgr.check("invocationContext_is_null=false,person=name1,otherName=otherName2,name=name1,requestBody=bodyName",
+        result);
+  }
+
+  private void checkQueryGenericObject() {
+    final GenericParam<Person> requestBody = new GenericParam<>();
+    requestBody.setNum(1).setStr("str1").setData(new Person("bodyPerson"));
+    String result = intf.checkQueryGenericObject(requestBody, "str2", 2);
+    TestMgr.check(
+        "str=str2,generic=GenericParam{str='str2', num=2, 
data=null},requestBody=GenericParam{str='str1', num=1, data=bodyPerson}",
+        result);
+  }
+
+  private void checkQueryGenericString() {
+    final GenericParam<Person> requestBody = new GenericParam<>();
+    requestBody.setNum(1).setStr("str1").setData(new Person("bodyPerson"));
+    String result = intf.checkQueryGenericString("str2", requestBody, 2, 
"dataTest", "strInSubclass", 33);
+    TestMgr.check(
+        "str=str2,generic=GenericParamExtended{strExtended='strInSubclass', 
intExtended=33, super="
+            + "GenericParam{str='str2', num=2, 
data=dataTest}},requestBody=GenericParam{str='str1', num=1, data=bodyPerson}",
+        result);
+  }
 }
diff --git 
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestRestTemplate.java
 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestRestTemplate.java
index 5b8c9eb..c29c0e9 100644
--- 
a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestRestTemplate.java
+++ 
b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestRestTemplate.java
@@ -17,7 +17,12 @@
 
 package org.apache.servicecomb.demo.springmvc.client;
 
+import org.apache.servicecomb.demo.TestMgr;
+import org.apache.servicecomb.demo.compute.GenericParam;
+import org.apache.servicecomb.demo.compute.Person;
 import org.apache.servicecomb.provider.springmvc.reference.RestTemplateBuilder;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpMethod;
 import org.springframework.http.ResponseEntity;
 import org.springframework.util.Assert;
 import org.springframework.web.client.RestTemplate;
@@ -29,6 +34,12 @@ public class TestRestTemplate {
     testvoidResponse();
     testVoidResponse();
     checkAllVoidTestResult();
+    checkQueryObject();
+  }
+
+  public void runRest() {
+    checkQueryGenericObject();
+    checkQueryGenericString();
   }
 
   private void testvoidResponse() {
@@ -48,4 +59,37 @@ public class TestRestTemplate {
         .getForEntity("cse://springmvc/codeFirstSpringmvc/checkVoidResult", 
boolean.class);
     Assert.isTrue(resultEntity.getBody(), "not all void test is passed");
   }
+
+  private void checkQueryObject() {
+    final ResponseEntity<String> responseEntity = restTemplate
+        
.postForEntity("cse://springmvc/codeFirstSpringmvc/checkQueryObject?name={1}&otherName={2}",
+            new Person("bodyName"), String.class, "name1", "otherName2");
+    
TestMgr.check("invocationContext_is_null=false,person=name1,otherName=otherName2,name=name1,requestBody=bodyName",
+        responseEntity.getBody());
+  }
+
+  private void checkQueryGenericObject() {
+    final GenericParam<Person> requestBody = new GenericParam<>();
+    requestBody.setNum(1).setStr("str1").setData(new Person("bodyPerson"));
+    final HttpEntity<GenericParam<Person>> requestEntity = new 
HttpEntity<>(requestBody);
+    final ResponseEntity<String> responseEntity = restTemplate
+        
.exchange("cse://springmvc/codeFirstSpringmvc/checkQueryGenericObject?str={1}&num={2}",
+            HttpMethod.PUT, requestEntity, String.class, "str2", 2);
+    TestMgr.check(
+        "str=str2,generic=GenericParam{str='str2', num=2, 
data=null},requestBody=GenericParam{str='str1', num=1, data=bodyPerson}",
+        responseEntity.getBody());
+  }
+
+  private void checkQueryGenericString() {
+    final GenericParam<Person> requestBody = new GenericParam<>();
+    requestBody.setNum(1).setStr("str1").setData(new Person("bodyPerson"));
+    final ResponseEntity<String> responseEntity = restTemplate.exchange(
+        
"cse://springmvc/codeFirstSpringmvc/checkQueryGenericString?str={1}&num={2}&data={3}&strExtended={4}&intExtended={5}",
+        HttpMethod.PUT, new HttpEntity<>(requestBody), String.class, "str2", 
2, "dataTest",
+        "strInSubclass", 33);
+    TestMgr.check(
+        "str=str2,generic=GenericParamExtended{strExtended='strInSubclass', 
intExtended=33, super="
+            + "GenericParam{str='str2', num=2, 
data=dataTest}},requestBody=GenericParam{str='str1', num=1, data=bodyPerson}",
+        responseEntity.getBody());
+  }
 }
diff --git 
a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
 
b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
index 883f059..0f407f6 100644
--- 
a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
+++ 
b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvc.java
@@ -34,6 +34,8 @@ import 
org.apache.servicecomb.common.rest.codec.RestObjectMapper;
 import org.apache.servicecomb.core.Const;
 import org.apache.servicecomb.demo.EmptyObject;
 import org.apache.servicecomb.demo.Generic;
+import org.apache.servicecomb.demo.compute.GenericParam;
+import org.apache.servicecomb.demo.compute.GenericParamExtended;
 import org.apache.servicecomb.demo.compute.Person;
 import org.apache.servicecomb.demo.ignore.InputModelForTestIgnore;
 import org.apache.servicecomb.demo.ignore.OutputModelForTestIgnore;
@@ -141,10 +143,10 @@ public class CodeFirstSpringmvc {
   public Response cseResponse(InvocationContext c1) {
     Response response = Response.createSuccess(Status.ACCEPTED, new User());
     Headers headers = response.getHeaders();
-    headers.addHeader("h1", "h1v " + 
c1.getContext().get(Const.SRC_MICROSERVICE).toString());
+    headers.addHeader("h1", "h1v " + 
c1.getContext().get(Const.SRC_MICROSERVICE));
 
     InvocationContext c2 = ContextUtils.getInvocationContext();
-    headers.addHeader("h2", "h2v " + 
c2.getContext().get(Const.SRC_MICROSERVICE).toString());
+    headers.addHeader("h2", "h2v " + 
c2.getContext().get(Const.SRC_MICROSERVICE));
 
     return response;
   }
@@ -464,4 +466,37 @@ public class CodeFirstSpringmvc {
     return testvoidInRPCSuccess && testVoidInRPCSuccess && 
testvoidInRestTemplateSuccess
         && testVoidInRestTemplateSuccess;
   }
+
+  /**
+   * Simple query object test, users can use it mixed with InvocationContext 
and plain query param, RequestBody
+   */
+  @PostMapping(path = "/checkQueryObject")
+  public String checkQueryObject(Person person, @RequestParam(name = 
"otherName") String otherName,
+      InvocationContext invocationContext, @RequestParam(name = "name") String 
name, @RequestBody Person requestBody) {
+    LOGGER.info("checkQueryObject() is called!");
+    return "invocationContext_is_null=" + (null == invocationContext) + 
",person="
+        + person + ",otherName=" + otherName + ",name=" + name + 
",requestBody=" + requestBody;
+  }
+
+  /**
+   * For the nesting object params, including the generic params whose generic 
field is an object,
+   * the inner object field is not supported.
+   */
+  @PutMapping(path = "/checkQueryGenericObject")
+  public String checkQueryGenericObject(@RequestBody GenericParam<Person> 
requestBody,
+      GenericParam<Person> generic, String str) {
+    LOGGER.info("checkQueryGenericObject() is called!");
+    return "str=" + str + ",generic=" + generic + ",requestBody=" + 
requestBody;
+  }
+
+  /**
+   * If the generic field is simple type, it's supported to be deserialized.
+   * The same for those simple type field inherited from the parent class.
+   */
+  @PutMapping(path = "/checkQueryGenericString")
+  public String checkQueryGenericString(String str, @RequestBody 
GenericParam<Person> requestBody,
+      GenericParamExtended<String> generic) {
+    LOGGER.info("checkQueryGenericObject() is called!");
+    return "str=" + str + ",generic=" + generic + ",requestBody=" + 
requestBody;
+  }
 }

Reply via email to