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; + } }