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/06/25 01:56:20 UTC

[incubator-servicecomb-java-chassis] branch master updated (02df05d -> a2bbd88)

This is an automated email from the ASF dual-hosted git repository.

liubao pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git.


    from 02df05d  add alias of default executor thread pool, add schema compatibility warning log
     new 3872df0  [SCB-684]Following swagger conventions. Adding and change some test cases.
     new a2bbd88  [SCB-684]fix review comments

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../java/org/apache/servicecomb/demo/TestMgr.java  |  4 ++
 .../src/main/resources/microservice.yaml           |  1 +
 .../server/CodeFirstSpringmvcForSchema.java        | 67 +++++++++++++++++
 .../server/ProducerSchemaFactoryHolder.java        | 83 ++++++++++++++++++++++
 .../src/main/resources/microservice.yaml           |  1 +
 .../tests/endpoints/CodeFirstSpringmvc.java        |  8 +--
 6 files changed, 160 insertions(+), 4 deletions(-)
 create mode 100644 demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvcForSchema.java
 create mode 100644 demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/ProducerSchemaFactoryHolder.java


[incubator-servicecomb-java-chassis] 02/02: [SCB-684]fix review comments

Posted by li...@apache.org.
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 a2bbd882bd7e3cf75633eb987bb5349cf33c0373
Author: liubao <ba...@huawei.com>
AuthorDate: Fri Jun 22 18:25:06 2018 +0800

    [SCB-684]fix review comments
---
 .../server/ProducerSchemaFactoryHolder.java        |  7 ++++--
 .../META-INF/spring/springmvc.server.bean.xml      | 25 ----------------------
 2 files changed, 5 insertions(+), 27 deletions(-)

diff --git a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/ProducerSchemaFactoryHolder.java b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/ProducerSchemaFactoryHolder.java
index 766d078..687273b 100644
--- a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/ProducerSchemaFactoryHolder.java
+++ b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/ProducerSchemaFactoryHolder.java
@@ -21,9 +21,11 @@ import org.apache.servicecomb.core.BootListener;
 import org.apache.servicecomb.core.definition.SchemaMeta;
 import org.apache.servicecomb.core.definition.schema.ProducerSchemaFactory;
 import org.apache.servicecomb.demo.TestMgr;
+import org.apache.servicecomb.serviceregistry.RegistryUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectWriter;
@@ -34,8 +36,9 @@ import io.swagger.models.Swagger;
 import io.swagger.util.Yaml;
 
 /**
- * Created by Administrator on 2018/6/22.
+ * Testing schemas generation should be same for each boot up and accommodate swagger.
  */
+@Component
 public class ProducerSchemaFactoryHolder implements BootListener {
   private static final Logger LOGGER = LoggerFactory.getLogger(ProducerSchemaFactoryHolder.class);
 
@@ -53,7 +56,7 @@ public class ProducerSchemaFactoryHolder implements BootListener {
             new CodeFirstSpringmvcForSchema());
     String codeFirst = getSwaggerContent(meta.getSwagger());
     TestMgr.check("07a48acef4cc1a7f2387d695923c49e98951a974e4f51cf1356d6878db48888f",
-        Hashing.sha256().newHasher().putString(codeFirst, Charsets.UTF_8).hash().toString());
+        RegistryUtils.calcSchemaSummary(codeFirst));
     TestMgr.check(codeFirst.length(), 899);
 
     if (!TestMgr.isSuccess()) {
diff --git a/demo/demo-springmvc/springmvc-server/src/main/resources/META-INF/spring/springmvc.server.bean.xml b/demo/demo-springmvc/springmvc-server/src/main/resources/META-INF/spring/springmvc.server.bean.xml
deleted file mode 100644
index 7b05f28..0000000
--- a/demo/demo-springmvc/springmvc-server/src/main/resources/META-INF/spring/springmvc.server.bean.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-  ~ 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.
-  -->
-
-<beans xmlns="http://www.springframework.org/schema/beans"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd">
-
-  <bean id="ProducerSchemaFactoryHolder"
-    class="org.apache.servicecomb.demo.springmvc.server.ProducerSchemaFactoryHolder"></bean>
-</beans>


[incubator-servicecomb-java-chassis] 01/02: [SCB-684]Following swagger conventions. Adding and change some test cases.

Posted by li...@apache.org.
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 3872df0596ff176dbd629953017a3ece1262fc3c
Author: liubao <ba...@huawei.com>
AuthorDate: Fri Jun 22 14:59:13 2018 +0800

    [SCB-684]Following swagger conventions. Adding and change some test cases.
---
 .../java/org/apache/servicecomb/demo/TestMgr.java  |  4 ++
 .../src/main/resources/microservice.yaml           |  1 +
 .../server/CodeFirstSpringmvcForSchema.java        | 67 ++++++++++++++++++
 .../server/ProducerSchemaFactoryHolder.java        | 80 ++++++++++++++++++++++
 .../META-INF/spring/springmvc.server.bean.xml      | 25 +++++++
 .../src/main/resources/microservice.yaml           |  1 +
 .../tests/endpoints/CodeFirstSpringmvc.java        |  8 +--
 7 files changed, 182 insertions(+), 4 deletions(-)

diff --git a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/TestMgr.java b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/TestMgr.java
index 80c5bf0..f2218bc 100644
--- a/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/TestMgr.java
+++ b/demo/demo-schema/src/main/java/org/apache/servicecomb/demo/TestMgr.java
@@ -74,6 +74,10 @@ public class TestMgr {
     errorList.add(error);
   }
 
+  public static boolean isSuccess() {
+    return errorList.isEmpty();
+  }
+
   public static void summary() {
     if (errorList.isEmpty()) {
       LOGGER.info("............. test finished ............");
diff --git a/demo/demo-springmvc/springmvc-client/src/main/resources/microservice.yaml b/demo/demo-springmvc/springmvc-client/src/main/resources/microservice.yaml
index 8dc4824..09a4d0e 100644
--- a/demo/demo-springmvc/springmvc-client/src/main/resources/microservice.yaml
+++ b/demo/demo-springmvc/springmvc-client/src/main/resources/microservice.yaml
@@ -18,6 +18,7 @@
 APPLICATION_ID: springmvctest
 service_description:
   name: springmvcClient
+  environment: development
   version: 0.0.1
 servicecomb:
   service:
diff --git a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvcForSchema.java b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvcForSchema.java
new file mode 100644
index 0000000..fd5ddce
--- /dev/null
+++ b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/CodeFirstSpringmvcForSchema.java
@@ -0,0 +1,67 @@
+/*
+ * 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.server;
+
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RequestPart;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * Created for testing schema to accommodate swagger api specification. When change this class, please use
+ * http://editor.swagger.io/ to validate the generated schema and should not give any errors. In test case,
+ * only checksum is validated to make sure schema is not changed.
+ */
+@RestSchema(schemaId = "CodeFirstSpringmvcForSchema")
+@RequestMapping(path = "/forScheam")
+public class CodeFirstSpringmvcForSchema {
+  /*
+   * Using http://editor.swagger.io/ . Listing errors not handled:
+   *
+   * #1. Should NOT have additional properties additionalProperty: type, format, name, in, required
+   /reduce:
+    get:
+      operationId: "reduce"
+      parameters:
+      - name: "b"
+        in: "cookie"
+        required: false
+   This schema gives error, but according to https://swagger.io/docs/specification/describing-parameters/#cookie-parameters
+   This should supported.
+
+
+   * #2. Operations with Parameters of "in: formData" must include "application/x-www-form-urlencoded" or "multipart/form-data" in their "consumes" property
+   This error can be fixed by user code.
+
+
+   *
+   */
+
+
+  @RequestMapping(path = "/uploadFile", method = RequestMethod.POST,
+      consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
+  @ResponseBody
+  public boolean uploadAwardFile(@RequestParam("fileType") String fileType, @RequestParam("zoneId") String zoneId,
+      @RequestPart("file") MultipartFile file) {
+    throw new UnsupportedOperationException("only for testing schema");
+  }
+}
diff --git a/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/ProducerSchemaFactoryHolder.java b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/ProducerSchemaFactoryHolder.java
new file mode 100644
index 0000000..766d078
--- /dev/null
+++ b/demo/demo-springmvc/springmvc-server/src/main/java/org/apache/servicecomb/demo/springmvc/server/ProducerSchemaFactoryHolder.java
@@ -0,0 +1,80 @@
+/*
+ * 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.server;
+
+import org.apache.servicecomb.core.BootListener;
+import org.apache.servicecomb.core.definition.SchemaMeta;
+import org.apache.servicecomb.core.definition.schema.ProducerSchemaFactory;
+import org.apache.servicecomb.demo.TestMgr;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectWriter;
+import com.google.common.base.Charsets;
+import com.google.common.hash.Hashing;
+
+import io.swagger.models.Swagger;
+import io.swagger.util.Yaml;
+
+/**
+ * Created by Administrator on 2018/6/22.
+ */
+public class ProducerSchemaFactoryHolder implements BootListener {
+  private static final Logger LOGGER = LoggerFactory.getLogger(ProducerSchemaFactoryHolder.class);
+
+  private ObjectWriter writer = Yaml.pretty();
+
+  @Autowired
+  private ProducerSchemaFactory factory;
+
+  public void test() {
+    LOGGER.info("ProducerSchemaFactoryHolder testing start");
+    SchemaMeta meta =
+        factory.getOrCreateProducerSchema("customer-service",
+            "test1",
+            CodeFirstSpringmvcForSchema.class,
+            new CodeFirstSpringmvcForSchema());
+    String codeFirst = getSwaggerContent(meta.getSwagger());
+    TestMgr.check("07a48acef4cc1a7f2387d695923c49e98951a974e4f51cf1356d6878db48888f",
+        Hashing.sha256().newHasher().putString(codeFirst, Charsets.UTF_8).hash().toString());
+    TestMgr.check(codeFirst.length(), 899);
+
+    if (!TestMgr.isSuccess()) {
+      TestMgr.summary();
+      throw new IllegalStateException("schema not the same. ");
+    }
+  }
+
+  private String getSwaggerContent(Swagger swagger) {
+    try {
+      return writer.writeValueAsString(swagger);
+    } catch (JsonProcessingException e) {
+      throw new Error(e);
+    }
+  }
+
+  @Override
+  public void onBootEvent(BootEvent event) {
+    if (event.getEventType() == BootListener.EventType.AFTER_REGISTRY) {
+      test();
+    }
+  }
+}
+
diff --git a/demo/demo-springmvc/springmvc-server/src/main/resources/META-INF/spring/springmvc.server.bean.xml b/demo/demo-springmvc/springmvc-server/src/main/resources/META-INF/spring/springmvc.server.bean.xml
new file mode 100644
index 0000000..7b05f28
--- /dev/null
+++ b/demo/demo-springmvc/springmvc-server/src/main/resources/META-INF/spring/springmvc.server.bean.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<beans xmlns="http://www.springframework.org/schema/beans"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://www.springframework.org/schema/beans classpath:org/springframework/beans/factory/xml/spring-beans-3.0.xsd">
+
+  <bean id="ProducerSchemaFactoryHolder"
+    class="org.apache.servicecomb.demo.springmvc.server.ProducerSchemaFactoryHolder"></bean>
+</beans>
diff --git a/demo/demo-springmvc/springmvc-server/src/main/resources/microservice.yaml b/demo/demo-springmvc/springmvc-server/src/main/resources/microservice.yaml
index b9c9638..c2a2087 100644
--- a/demo/demo-springmvc/springmvc-server/src/main/resources/microservice.yaml
+++ b/demo/demo-springmvc/springmvc-server/src/main/resources/microservice.yaml
@@ -21,6 +21,7 @@ APPLICATION_ID: springmvctest
 service_description:
   name: springmvc
   version: 0.0.3
+  environment: development
   paths:
     - path: /test1/testpath
       property:
diff --git a/integration-tests/springmvc-tests/springmvc-tests-common/src/test/java/org/apache/servicecomb/demo/springmvc/tests/endpoints/CodeFirstSpringmvc.java b/integration-tests/springmvc-tests/springmvc-tests-common/src/test/java/org/apache/servicecomb/demo/springmvc/tests/endpoints/CodeFirstSpringmvc.java
index 7748ff6..c235b79 100644
--- a/integration-tests/springmvc-tests/springmvc-tests-common/src/test/java/org/apache/servicecomb/demo/springmvc/tests/endpoints/CodeFirstSpringmvc.java
+++ b/integration-tests/springmvc-tests/springmvc-tests-common/src/test/java/org/apache/servicecomb/demo/springmvc/tests/endpoints/CodeFirstSpringmvc.java
@@ -56,7 +56,7 @@ import io.swagger.annotations.ResponseHeader;
 public class CodeFirstSpringmvc extends CodeFirstSpringmvcBase {
   @ResponseHeaders({@ResponseHeader(name = "h1", response = String.class),
       @ResponseHeader(name = "h2", response = String.class)})
-  @RequestMapping(path = "/responseEntity", method = RequestMethod.POST)
+  @RequestMapping(path = "/responseEntity", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
   @Override
   public ResponseEntity<Date> responseEntity(InvocationContext c1, @RequestAttribute("date") Date date) {
     return super.responseEntity(c1, date);
@@ -89,14 +89,14 @@ public class CodeFirstSpringmvc extends CodeFirstSpringmvcBase {
     return super.bytes(input);
   }
 
-  @RequestMapping(path = "/upload", method = RequestMethod.POST, produces = MediaType.TEXT_PLAIN_VALUE)
+  @RequestMapping(path = "/upload", method = RequestMethod.POST, produces = MediaType.TEXT_PLAIN_VALUE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
   @Override
   public String fileUpload(@RequestPart(name = "file1") MultipartFile file1,
       @RequestPart(name = "someFile") MultipartFile file2, @RequestAttribute("name") String name) {
     return super.fileUpload(file1, file2, name);
   }
 
-  @RequestMapping(path = "/uploadWithoutAnnotation", method = RequestMethod.POST, produces = MediaType.TEXT_PLAIN_VALUE)
+  @RequestMapping(path = "/uploadWithoutAnnotation", method = RequestMethod.POST, produces = MediaType.TEXT_PLAIN_VALUE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
   public String fileUploadWithoutAnnotation(MultipartFile file1, MultipartFile file2,
       @RequestAttribute("name") String name) {
     return super.fileUpload(file1, file2, name);
@@ -114,7 +114,7 @@ public class CodeFirstSpringmvc extends CodeFirstSpringmvcBase {
     return a;
   }
 
-  @RequestMapping(path = "/add", method = RequestMethod.POST)
+  @RequestMapping(path = "/add", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
   @Override
   public int add(@RequestAttribute("a") int a, @RequestAttribute("b") int b) {
     return super.add(a, b);