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 2018/01/20 06:01:48 UTC

[incubator-servicecomb-java-chassis] 09/10: SCB-266 change demo springmvc to test generic

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 57d646d0ca944a3d5db297267b959b5f43eb0529
Author: wujimin <wu...@huawei.com>
AuthorDate: Sat Jan 20 04:38:24 2018 +0800

    SCB-266 change demo springmvc to test generic
---
 .../demo/{server/User.java => Generic.java}        |  50 +-------
 .../org/apache/servicecomb/demo/server/User.java   |  12 ++
 .../client/CodeFirstRestTemplateSpringmvc.java     |   5 +
 ...rigmvcIntf.java => CodeFirstSpringmvcIntf.java} |  16 ++-
 .../demo/springmvc/client/TestGeneric.java         | 130 +++++++++++++++++++++
 .../demo/springmvc/client/TestObject.java          |  16 +--
 .../demo/springmvc/client/TestResponse.java        |   4 +-
 .../demo/springmvc/server/CodeFirstSpringmvc.java  |  44 ++++++-
 8 files changed, 210 insertions(+), 67 deletions(-)

diff --git a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/server/User.java b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/Generic.java
similarity index 51%
copy from demo/demo-schema/src/main/java/org/apache/servicecomb/demo/server/User.java
copy to demo/demo-schema/src/main/java/org/apache/servicecomb/demo/Generic.java
index e7d4e94..401bb52 100644
--- a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/server/User.java
+++ b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/Generic.java
@@ -14,52 +14,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+package org.apache.servicecomb.demo;
 
-package org.apache.servicecomb.demo.server;
-
-public class User {
-  private String name = "nameA";
-
-  private int age = 100;
-
-  private int index;
-
-  private String[] names;
-
-  public String getName() {
-    return name;
-  }
-
-  public void setName(String name) {
-    this.name = name;
-  }
-
-  public String[] getNames() {
-    return names;
-  }
-
-  public void setNames(String[] names) {
-    this.names = names;
-  }
-
-  public int getAge() {
-    return age;
-  }
-
-  public void setAge(int age) {
-    this.age = age;
-  }
-
-  public int getIndex() {
-    return index;
-  }
-
-  public void setIndex(int index) {
-    this.index = index;
-  }
-
-  @Override
-  public String toString() {
-    return "User [name=" + name + ", age=" + age + ", index=" + index + "]";
-  }
+public class Generic<T> {
+  public T value;
 }
diff --git a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/server/User.java b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/server/User.java
index e7d4e94..c55ed1e 100644
--- a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/server/User.java
+++ b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/server/User.java
@@ -17,6 +17,10 @@
 
 package org.apache.servicecomb.demo.server;
 
+import org.apache.servicecomb.foundation.common.utils.JsonUtils;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+
 public class User {
   private String name = "nameA";
 
@@ -62,4 +66,12 @@ public class User {
   public String toString() {
     return "User [name=" + name + ", age=" + age + ", index=" + index + "]";
   }
+
+  public String jsonString() {
+    try {
+      return JsonUtils.writeValueAsString(this);
+    } catch (JsonProcessingException e) {
+      throw new IllegalStateException(e);
+    }
+  }
 }
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 9076f85..722f7d2 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
@@ -68,6 +68,8 @@ public class CodeFirstRestTemplateSpringmvc extends CodeFirstRestTemplate {
 
   private TestObject testObject = new TestObject();
 
+  private TestGeneric testGeneric = new TestGeneric();
+
   @Override
   protected void testOnlyRest(RestTemplate template, String cseUrlPrefix) {
     try {
@@ -78,6 +80,7 @@ public class CodeFirstRestTemplateSpringmvc extends CodeFirstRestTemplate {
 
     testResponse.runRest();
     testObject.runRest();
+    testGeneric.runRest();
 
     super.testOnlyRest(template, cseUrlPrefix);
   }
@@ -86,6 +89,7 @@ public class CodeFirstRestTemplateSpringmvc extends CodeFirstRestTemplate {
   protected void testOnlyHighway(RestTemplate template, String cseUrlPrefix) {
     testResponse.runHighway();
     testObject.runHighway();
+    testGeneric.runHighway();
 
     super.testOnlyHighway(template, cseUrlPrefix);
   }
@@ -94,6 +98,7 @@ public class CodeFirstRestTemplateSpringmvc extends CodeFirstRestTemplate {
   protected void testAllTransport(String microserviceName, RestTemplate template, String cseUrlPrefix) {
     testResponse.runAllTransport();
     testObject.runAllTransport();
+    testGeneric.runAllTransport();
 
     testResponseEntity("springmvc", template, cseUrlPrefix);
     testCodeFirstTestForm(template, cseUrlPrefix);
diff --git a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CodeFirstSprigmvcIntf.java b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CodeFirstSpringmvcIntf.java
similarity index 75%
rename from demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CodeFirstSprigmvcIntf.java
rename to demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CodeFirstSpringmvcIntf.java
index 12b6b54..5109d19 100644
--- a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CodeFirstSprigmvcIntf.java
+++ b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/CodeFirstSpringmvcIntf.java
@@ -23,11 +23,13 @@ import java.util.Map;
 import javax.xml.ws.Holder;
 
 import org.apache.servicecomb.demo.EmptyObject;
+import org.apache.servicecomb.demo.Generic;
 import org.apache.servicecomb.demo.server.User;
 import org.apache.servicecomb.swagger.invocation.Response;
+import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 
-public interface CodeFirstSprigmvcIntf {
+public interface CodeFirstSpringmvcIntf {
   ResponseEntity<Date> responseEntity(Date date);
 
   Response cseResponse();
@@ -42,5 +44,15 @@ public interface CodeFirstSprigmvcIntf {
 
   Holder<Object> testHolderObject(Holder<Object> input);
 
-  Holder<User> testGeneric(Holder<User> input);
+  Holder<User> testHolderUser(Holder<User> input);
+
+  Generic<User> testGenericUser(Generic<User> input);
+
+  Generic<Long> testGenericLong(Generic<Long> input);
+
+  Generic<Date> testGenericDate(Generic<Date> input);
+
+  Generic<HttpStatus> testGenericEnum(Generic<HttpStatus> input);
+
+  Generic<Generic<User>> testGenericGenericUser(Generic<Generic<User>> input);
 }
diff --git a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestGeneric.java b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestGeneric.java
new file mode 100644
index 0000000..34a3475
--- /dev/null
+++ b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestGeneric.java
@@ -0,0 +1,130 @@
+/*
+ * 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.springmvc.client;
+
+import java.util.Date;
+
+import javax.xml.ws.Holder;
+
+import org.apache.servicecomb.demo.Generic;
+import org.apache.servicecomb.demo.TestMgr;
+import org.apache.servicecomb.demo.server.User;
+import org.apache.servicecomb.provider.pojo.Invoker;
+import org.apache.servicecomb.provider.springmvc.reference.CseRestTemplate;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.client.RestTemplate;
+
+import com.fasterxml.jackson.databind.util.ISO8601Utils;
+
+public class TestGeneric {
+  private CodeFirstSpringmvcIntf intf;
+
+  private RestTemplate restTemplate = new CseRestTemplate();
+
+  private String prefix = "cse://springmvc/codeFirstSpringmvc";
+
+  public TestGeneric() {
+    intf = Invoker.createProxy("springmvc", "codeFirst", CodeFirstSpringmvcIntf.class);
+  }
+
+  public void runRest() {
+    testHolderUser_rest();
+    testGenericUser_rest();
+    testGenericGenericUser_rest();
+    testGenericLong_rest();
+    testGenericDate_rest();
+    testGenericEnum_rest();
+  }
+
+  public void runHighway() {
+  }
+
+  public void runAllTransport() {
+  }
+
+  @SuppressWarnings("unchecked")
+  private void testGenericEnum_rest() {
+    Generic<HttpStatus> generic = new Generic<>();
+    generic.value = HttpStatus.OK;
+    Generic<HttpStatus> result = intf.testGenericEnum(generic);
+    TestMgr.check(HttpStatus.OK, result.value);
+    TestMgr.check(HttpStatus.class, result.value.getClass());
+
+    result = restTemplate.postForObject(prefix + "/genericEnum", generic, Generic.class);
+    TestMgr.check(HttpStatus.OK, result.value);
+    TestMgr.check(HttpStatus.class, result.value.getClass());
+  }
+
+  @SuppressWarnings("unchecked")
+  private void testGenericDate_rest() {
+    Generic<Date> generic = new Generic<>();
+    generic.value = new Date(1001);
+    Generic<Date> result = intf.testGenericDate(generic);
+    TestMgr.check("1970-01-01T00:00:01.001Z", ISO8601Utils.format(result.value, true));
+    TestMgr.check(Date.class, result.value.getClass());
+
+    result = restTemplate.postForObject(prefix + "/genericDate", generic, Generic.class);
+    TestMgr.check("1970-01-01T00:00:01.001Z", ISO8601Utils.format(result.value, true));
+    TestMgr.check(Date.class, result.value.getClass());
+  }
+
+  @SuppressWarnings("unchecked")
+  private void testGenericLong_rest() {
+    Generic<Long> generic = new Generic<>();
+    generic.value = 100L;
+    Generic<Long> result = intf.testGenericLong(generic);
+    TestMgr.check(100, result.value);
+    TestMgr.check(Long.class, result.value.getClass());
+
+    result = restTemplate.postForObject(prefix + "/genericLong", generic, Generic.class);
+    TestMgr.check(100, result.value);
+    TestMgr.check(Long.class, result.value.getClass());
+  }
+
+  @SuppressWarnings("unchecked")
+  private void testGenericGenericUser_rest() {
+    Generic<Generic<User>> generic = new Generic<>();
+    generic.value = new Generic<>();
+    generic.value.value = new User();
+    Generic<Generic<User>> result = intf.testGenericGenericUser(generic);
+    TestMgr.check("{\"name\":\"nameA\",\"age\":100,\"index\":0,\"names\":null}", result.value.value.jsonString());
+
+    result = restTemplate.postForObject(prefix + "/genericGenericUser", generic, Generic.class);
+    TestMgr.check("{\"name\":\"nameA\",\"age\":100,\"index\":0,\"names\":null}", result.value.value.jsonString());
+  }
+
+  @SuppressWarnings("unchecked")
+  private void testGenericUser_rest() {
+    Generic<User> generic = new Generic<>();
+    generic.value = new User();
+    Generic<User> result = intf.testGenericUser(generic);
+    TestMgr.check("{\"name\":\"nameA\",\"age\":100,\"index\":0,\"names\":null}", result.value.jsonString());
+
+    result = restTemplate.postForObject(prefix + "/genericUser", generic, Generic.class);
+    TestMgr.check("{\"name\":\"nameA\",\"age\":100,\"index\":0,\"names\":null}", result.value.jsonString());
+  }
+
+  @SuppressWarnings("unchecked")
+  private void testHolderUser_rest() {
+    Holder<User> holder = new Holder<>(new User());
+    Holder<User> result = intf.testHolderUser(holder);
+    TestMgr.check("{\"name\":\"nameA\",\"age\":100,\"index\":0,\"names\":null}", result.value.jsonString());
+
+    result = restTemplate.postForObject(prefix + "/holderUser", holder, Holder.class);
+    TestMgr.check("{\"name\":\"nameA\",\"age\":100,\"index\":0,\"names\":null}", result.value.jsonString());
+  }
+}
diff --git a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestObject.java b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestObject.java
index 9082005..a482587 100644
--- a/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestObject.java
+++ b/demo/demo-springmvc/springmvc-client/src/main/java/org/apache/servicecomb/demo/springmvc/client/TestObject.java
@@ -27,20 +27,19 @@ import javax.xml.ws.Holder;
 
 import org.apache.servicecomb.demo.EmptyObject;
 import org.apache.servicecomb.demo.TestMgr;
-import org.apache.servicecomb.demo.server.User;
 import org.apache.servicecomb.provider.pojo.Invoker;
 import org.apache.servicecomb.provider.springmvc.reference.CseRestTemplate;
 import org.springframework.web.client.RestTemplate;
 
 public class TestObject {
-  private CodeFirstSprigmvcIntf intf;
+  private CodeFirstSpringmvcIntf intf;
 
   private RestTemplate restTemplate = new CseRestTemplate();
 
   private String prefix = "cse://springmvc/codeFirstSpringmvc";
 
   public TestObject() {
-    intf = Invoker.createProxy("springmvc", "codeFirst", CodeFirstSprigmvcIntf.class);
+    intf = Invoker.createProxy("springmvc", "codeFirst", CodeFirstSpringmvcIntf.class);
   }
 
   public void runRest() {
@@ -57,17 +56,6 @@ public class TestObject {
     testObject();
     testListObject();
     testHolderObject();
-    testGeneric();
-  }
-
-  @SuppressWarnings("unchecked")
-  private void testGeneric() {
-    Holder<User> holder = new Holder<>(new User());
-    Holder<User> result = intf.testGeneric(holder);
-    TestMgr.check("{name=nameA, age=100, index=0, names=null}", result.value);
-
-    result = restTemplate.postForObject(prefix + "/generic", holder, Holder.class);
-    TestMgr.check("{name=nameA, age=100, index=0, names=null}", result.value);
   }
 
   @SuppressWarnings("unchecked")
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 4036bed..e56c3fe 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
@@ -25,10 +25,10 @@ import org.apache.servicecomb.swagger.invocation.Response;
 import org.springframework.http.ResponseEntity;
 
 public class TestResponse {
-  private CodeFirstSprigmvcIntf intf;
+  private CodeFirstSpringmvcIntf intf;
 
   public TestResponse() {
-    intf = Invoker.createProxy("springmvc", "codeFirst", CodeFirstSprigmvcIntf.class);
+    intf = Invoker.createProxy("springmvc", "codeFirst", CodeFirstSpringmvcIntf.class);
   }
 
   public void runRest() {
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 aceba90..839844e 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,7 @@ import org.apache.commons.io.IOUtils;
 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.Person;
 import org.apache.servicecomb.demo.ignore.InputModelForTestIgnore;
 import org.apache.servicecomb.demo.ignore.OutputModelForTestIgnore;
@@ -387,8 +388,47 @@ public class CodeFirstSpringmvc {
     return input;
   }
 
-  @PostMapping(path = "/generic")
-  public Holder<User> testGeneric(@RequestBody Holder<User> input) {
+  @PostMapping(path = "/holderUser")
+  public Holder<User> testHolderUser(@RequestBody Holder<User> input) {
+    Assert.isInstanceOf(Holder.class, input);
+    Assert.isInstanceOf(User.class, input.value);
+    return input;
+  }
+
+  @PostMapping(path = "/genericUser")
+  public Generic<User> testGenericUser(@RequestBody Generic<User> input) {
+    Assert.isInstanceOf(Generic.class, input);
+    Assert.isInstanceOf(User.class, input.value);
+    return input;
+  }
+
+  @PostMapping(path = "/genericLong")
+  public Generic<Long> testGenericLong(@RequestBody Generic<Long> input) {
+    Assert.isInstanceOf(Generic.class, input);
+    Assert.isInstanceOf(Long.class, input.value);
+    return input;
+  }
+
+  @PostMapping(path = "/genericDate")
+  public Generic<Date> testGenericDate(@RequestBody Generic<Date> input) {
+    Assert.isInstanceOf(Generic.class, input);
+    Assert.isInstanceOf(Date.class, input.value);
+    System.out.println(input.value);
+    return input;
+  }
+
+  @PostMapping(path = "/genericEnum")
+  public Generic<HttpStatus> testGenericEnum(@RequestBody Generic<HttpStatus> input) {
+    Assert.isInstanceOf(Generic.class, input);
+    Assert.isInstanceOf(HttpStatus.class, input.value);
+    return input;
+  }
+
+  @PostMapping(path = "/genericGenericUser")
+  public Generic<Generic<User>> testGenericGenericUser(@RequestBody Generic<Generic<User>> input) {
+    Assert.isInstanceOf(Generic.class, input);
+    Assert.isInstanceOf(Generic.class, input.value);
+    Assert.isInstanceOf(User.class, input.value.value);
     return input;
   }
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>.