You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2019/06/21 07:09:30 UTC
[servicecomb-toolkit] 14/49: Add SpringBoot programming model
This is an automated email from the ASF dual-hosted git repository.
ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-toolkit.git
commit e32ef38ea107c1947d2fa016307e576d6220e15e
Author: kakulisen <18...@163.com>
AuthorDate: Fri May 24 11:21:19 2019 +0800
Add SpringBoot programming model
Signed-off-by: kakulisen <18...@163.com>
---
.../toolkit/codegen/ServiceCombCodegen.java | 3 +
.../libraries/SpringBoot/Application.mustache | 15 +++
.../ServiceComb/libraries/SpringBoot/api.mustache | 31 +++++
.../libraries/SpringBoot/api_test.mustache | 38 +++++++
.../libraries/SpringBoot/bodyParams.mustache | 1 +
.../libraries/SpringBoot/formParams.mustache | 2 +
.../libraries/SpringBoot/headerParams.mustache | 1 +
.../libraries/SpringBoot/operationMethod.mustache | 13 +++
.../libraries/SpringBoot/pathParams.mustache | 1 +
.../ServiceComb/libraries/SpringBoot/pom.mustache | 125 +++++++++++++++++++++
.../libraries/SpringBoot/queryParams.mustache | 1 +
.../servicecomb/toolkit/codegen/GeneratorTest.java | 1 +
.../servicecomb/toolkit/cli/CodeGenerate.java | 2 +-
.../apache/servicecomb/toolkit/cli/CliTest.java | 2 +-
14 files changed, 234 insertions(+), 2 deletions(-)
diff --git a/code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegen.java b/code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegen.java
index 668db24..686afaa 100755
--- a/code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegen.java
+++ b/code-generator/src/main/java/org/apache/servicecomb/toolkit/codegen/ServiceCombCodegen.java
@@ -39,6 +39,8 @@ public class ServiceCombCodegen extends AbstractJavaCodegen implements CodegenCo
private static final String JAX_RS_LIBRARY = "JAX-RS";
+ private static final String SPRING_BOOT_LIBRARY = "SpringBoot";
+
private String mainClassPackage;
private String providerProject = "provider";
@@ -104,6 +106,7 @@ public class ServiceCombCodegen extends AbstractJavaCodegen implements CodegenCo
supportedLibraries.put(DEFAULT_LIBRARY, "ServiceComb Server application using the springboot programming model.");
supportedLibraries.put(POJO_LIBRARY, "ServiceComb Server application using the pojo programming model.");
supportedLibraries.put(JAX_RS_LIBRARY, "ServiceComb Server application using the jax-rs programming model.");
+ supportedLibraries.put(SPRING_BOOT_LIBRARY, "ServiceComb Server application using the SpringBoot programming model.");
setLibrary(DEFAULT_LIBRARY);
diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/Application.mustache b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/Application.mustache
new file mode 100755
index 0000000..2184ccb
--- /dev/null
+++ b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/Application.mustache
@@ -0,0 +1,15 @@
+package {{mainClassPackage}};
+
+import org.apache.servicecomb.springboot.starter.provider.EnableServiceComb;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+@EnableServiceComb
+public class Application {
+
+ public static void main(String[] args) throws Exception {
+ System.setProperty("local.registry.file", "notExistJustForceLocal");
+ SpringApplication.run(Application.class, args);
+ }
+}
\ No newline at end of file
diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/api.mustache b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/api.mustache
new file mode 100755
index 0000000..33f5a4b
--- /dev/null
+++ b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/api.mustache
@@ -0,0 +1,31 @@
+package {{apiPackage}};
+
+import {{modelPackage}}.*;
+
+{{#imports}}import {{import}};
+{{/imports}}
+
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
+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.multipart.MultipartFile;
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+import java.util.List;
+import java.util.Map;
+import static org.springframework.http.MediaType.*;
+
+@RestSchema(schemaId = "{{#camelcase}}{{classname}}{{/camelcase}}")
+@RequestMapping(value = "/", produces = {APPLICATION_JSON_VALUE})
+{{#operations}}
+public class {{classname}} {
+
+ {{>operationMethod}}
+
+}
+{{/operations}}
\ No newline at end of file
diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/api_test.mustache b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/api_test.mustache
new file mode 100755
index 0000000..d0444c2
--- /dev/null
+++ b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/api_test.mustache
@@ -0,0 +1,38 @@
+package {{package}};
+{{#imports}}import {{import}};
+{{/imports}}
+import java.util.*;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+import static org.junit.Assert.assertEquals;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class {{classname}}Test {
+@Autowired
+private {{classname}} api;
+{{#operations}}
+ {{#operation}}
+ @Test
+ public void {{operationId}}Test() throws Exception {
+ {{#allParams}}
+ {{^isFile}}
+ {{{dataType}}} {{paramName}} = {{{example}}};
+ {{/isFile}}
+ {{#isFile}}
+ org.springframework.web.multipart.MultipartFile {{paramName}} = null;
+ {{/isFile}}
+ {{/allParams}}
+ ResponseEntity<{{>returnTypes}}> responseEntity = api.{{operationId}}({{#allParams}}{{paramName}}{{#hasMore}}, {{/hasMore}}{{/allParams}});
+ assertEquals(HttpStatus.NOT_IMPLEMENTED, responseEntity.getStatusCode());
+ }
+ {{/operation}}
+{{/operations}}
+}
\ No newline at end of file
diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/bodyParams.mustache b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/bodyParams.mustache
new file mode 100755
index 0000000..5932bd1
--- /dev/null
+++ b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/bodyParams.mustache
@@ -0,0 +1 @@
+{{#isBodyParam}}@RequestBody {{{dataType}}} {{paramName}}{{/isBodyParam}}
\ No newline at end of file
diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/formParams.mustache b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/formParams.mustache
new file mode 100755
index 0000000..336c14d
--- /dev/null
+++ b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/formParams.mustache
@@ -0,0 +1,2 @@
+{{#isFormParam}}{{#notFile}}
+@RequestPart(value="{{paramName}}"{{#required}}, required=true{{/required}}{{^required}}, required=false{{/required}}) {{{dataType}}} {{paramName}}{{/notFile}}{{#isFile}}@RequestPart("file") MultipartFile {{baseName}}{{/isFile}}{{/isFormParam}}
\ No newline at end of file
diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/headerParams.mustache b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/headerParams.mustache
new file mode 100755
index 0000000..7c3018b
--- /dev/null
+++ b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/headerParams.mustache
@@ -0,0 +1 @@
+{{#isHeaderParam}}@RequestHeader(value="{{paramName}}", required={{#required}}true{{/required}}{{^required}}false{{/required}}) {{{dataType}}} {{paramName}}{{/isHeaderParam}}
\ No newline at end of file
diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/operationMethod.mustache b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/operationMethod.mustache
new file mode 100755
index 0000000..18b598c
--- /dev/null
+++ b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/operationMethod.mustache
@@ -0,0 +1,13 @@
+{{#operation}}
+
+ @RequestMapping(value = "{{path}}",
+ {{#hasProduces}}produces = { {{#produces}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/produces}} }, {{/hasProduces}}
+ {{#hasConsumes}}consumes = { {{#consumes}}"{{mediaType}}"{{#hasMore}}, {{/hasMore}}{{/consumes}} },{{/hasConsumes}}
+ method = RequestMethod.{{httpMethod}})
+ public ResponseEntity<{{>returnTypes}}> {{operationId}}({{#allParams}}{{>queryParams}}{{>pathParams}}{{>headerParams}}{{>bodyParams}}{{>formParams}}{{#hasMore}},
+ {{/hasMore}}{{/allParams}}) {
+ // do some magic!
+ return new ResponseEntity<{{>returnTypes}}>(HttpStatus.OK);
+ }
+
+{{/operation}}
\ No newline at end of file
diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/pathParams.mustache b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/pathParams.mustache
new file mode 100755
index 0000000..5152be0
--- /dev/null
+++ b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/pathParams.mustache
@@ -0,0 +1 @@
+{{#isPathParam}}@PathVariable("{{paramName}}") {{{dataType}}} {{paramName}}{{/isPathParam}}
\ No newline at end of file
diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/pom.mustache b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/pom.mustache
new file mode 100755
index 0000000..3c487c7
--- /dev/null
+++ b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/pom.mustache
@@ -0,0 +1,125 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <parent>
+ <artifactId>{{artifactId}}</artifactId>
+ <groupId>{{groupId}}</groupId>
+ <version>{{artifactVersion}}</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>provider</artifactId>
+ <packaging>jar</packaging>
+ <name>provider</name>
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <java-chassis.version>1.2.0</java-chassis.version>
+ </properties>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>java-chassis-dependencies</artifactId>
+ <version>${java-chassis.version}</version>
+ <type>pom</type>
+ <scope>import</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>{{groupId}}</groupId>
+ <artifactId>model</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>spring-boot-starter-provider</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>handler-flowcontrol-qps</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>handler-bizkeeper</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>handler-tracing-zipkin</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.servicecomb</groupId>
+ <artifactId>inspector</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.hibernate.validator</groupId>
+ <artifactId>hibernate-validator</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.validation</groupId>
+ <artifactId>validation-api</artifactId>
+ <version>2.0.1.Final</version>
+ </dependency>
+
+ </dependencies>
+
+ <!--for package and deploy-->
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <version>2.6</version>
+ <configuration>
+ <archive>
+ <manifest>
+ <addClasspath>true</addClasspath>
+ <classpathPrefix>lib/</classpathPrefix>
+ <!--change to your main class-->
+ <mainClass>${package}.Application</mainClass>
+ </manifest>
+ <manifestEntries>
+ <Class-Path>. </Class-Path>
+ </manifestEntries>
+ </archive>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>copy-dependencies</id>
+ <phase>package</phase>
+ <goals>
+ <goal>copy-dependencies</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>target/lib</outputDirectory>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>3.1</version>
+ <configuration>
+ <source>1.8</source>
+ <target>1.8</target>
+ </configuration>
+ </plugin>
+
+ </plugins>
+ </build>
+
+</project>
\ No newline at end of file
diff --git a/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/queryParams.mustache b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/queryParams.mustache
new file mode 100755
index 0000000..6ce8e14
--- /dev/null
+++ b/code-generator/src/main/resources/ServiceComb/libraries/SpringBoot/queryParams.mustache
@@ -0,0 +1 @@
+{{#isQueryParam}}@RequestParam(value = "{{paramName}}"{{#required}}, required = true{{/required}}{{^required}}, required = false{{/required}}{{#defaultValue}}, defaultValue="{{{defaultValue}}}"{{/defaultValue}}) {{{dataType}}} {{paramName}}{{/isQueryParam}}
\ No newline at end of file
diff --git a/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/GeneratorTest.java b/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/GeneratorTest.java
index 08f5ae3..e7ae3d4 100755
--- a/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/GeneratorTest.java
+++ b/code-generator/src/test/java/org/apache/servicecomb/toolkit/codegen/GeneratorTest.java
@@ -40,6 +40,7 @@ public class GeneratorTest {
generateCode("SpringMVC");
generateCode("POJO");
generateCode("JAX-RS");
+ generateCode("SpringBoot");
}
private void generateCode(String programmingModel) throws IOException, URISyntaxException {
diff --git a/toolkit-cli/src/main/java/org/apache/servicecomb/toolkit/cli/CodeGenerate.java b/toolkit-cli/src/main/java/org/apache/servicecomb/toolkit/cli/CodeGenerate.java
index 4034812..6700110 100755
--- a/toolkit-cli/src/main/java/org/apache/servicecomb/toolkit/cli/CodeGenerate.java
+++ b/toolkit-cli/src/main/java/org/apache/servicecomb/toolkit/cli/CodeGenerate.java
@@ -39,7 +39,7 @@ import io.swagger.codegen.config.CodegenConfigurator;
public class CodeGenerate implements Runnable {
@Option(name = {"-p", "--programming-model"}, title = "programming model", required = false,
- description = "programming model, as SpringMVC, POJO or JAX-RS")
+ description = "programming model, as SpringMVC, POJO, JAX-RS, and SpringBoot")
private String programmingModel;
@Option(name = {"-m", "--microservice-framework"}, title = "framework",
diff --git a/toolkit-cli/src/test/java/org/apache/servicecomb/toolkit/cli/CliTest.java b/toolkit-cli/src/test/java/org/apache/servicecomb/toolkit/cli/CliTest.java
index b2a7664..cf0d047 100755
--- a/toolkit-cli/src/test/java/org/apache/servicecomb/toolkit/cli/CliTest.java
+++ b/toolkit-cli/src/test/java/org/apache/servicecomb/toolkit/cli/CliTest.java
@@ -31,7 +31,7 @@ public class CliTest {
@Test
public void generateServiceCombCodeFromSingleContract() throws IOException {
- String[] programModels = new String[] {"SpringMVC", "POJO", "JAX-RS"};
+ String[] programModels = new String[] {"SpringMVC","POJO","JAX-RS","SpringBoot"};
Path tempDir = Files.createTempDirectory(null);
Arrays.stream(programModels).forEach(model -> {
try {