This is an automated email from the ASF dual-hosted git repository. chanjarster pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/servicecomb-toolkit.git
commit b0d8b88d77317a470e6f351db2a6771db076f351 Author: kakulisen <[email protected]> AuthorDate: Tue Oct 29 09:23:43 2019 +0800 switch to oas-generator Signed-off-by: kakulisen <[email protected]> --- common/pom.xml | 30 ---------------------- contractgen/pom.xml | 15 +++++++++++ .../contractgen/DefaultContractsGenerator.java | 25 +++++++++--------- .../docgen/ContractsSwaggerUIGenerator.java | 8 +++--- .../docgen/ContractsSwaggerUIGeneratorTest.java | 11 ++++---- pom.xml | 24 +++++++++++++++++ toolkit-distribution/src/release/LICENSE | 9 +++++++ .../servicecomb/toolkit/plugin/GenerateUtil.java | 13 ++++++++-- 8 files changed, 80 insertions(+), 55 deletions(-) diff --git a/common/pom.xml b/common/pom.xml index 6855da3..0149615 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -55,36 +55,6 @@ </dependency> <dependency> - <groupId>org.apache.servicecomb</groupId> - <artifactId>swagger-generator-springmvc</artifactId> - <version>1.2.0</version> - </dependency> - - <dependency> - <groupId>org.apache.servicecomb</groupId> - <artifactId>swagger-generator-jaxrs</artifactId> - <version>1.2.0</version> - </dependency> - - <dependency> - <groupId>org.apache.servicecomb</groupId> - <artifactId>provider-rest-common</artifactId> - <version>1.2.0</version> - </dependency> - - <dependency> - <groupId>org.apache.servicecomb</groupId> - <artifactId>provider-pojo</artifactId> - <version>1.2.0</version> - <exclusions> - <exclusion> - <groupId>commons-lang</groupId> - <artifactId>commons-lang</artifactId> - </exclusion> - </exclusions> - </dependency> - - <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> diff --git a/contractgen/pom.xml b/contractgen/pom.xml index ffcadf6..b5c5a87 100644 --- a/contractgen/pom.xml +++ b/contractgen/pom.xml @@ -35,6 +35,21 @@ </dependency> <dependency> + <groupId>org.apache.servicecomb.toolkit</groupId> + <artifactId>oas-generator-jaxrs</artifactId> + </dependency> + + <dependency> + <groupId>org.apache.servicecomb.toolkit</groupId> + <artifactId>oas-generator-spring</artifactId> + </dependency> + + <dependency> + <groupId>org.apache.servicecomb.toolkit</groupId> + <artifactId>oas-generator-servicecomb</artifactId> + </dependency> + + <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> diff --git a/contractgen/src/main/java/org/apache/servicecomb/toolkit/contractgen/DefaultContractsGenerator.java b/contractgen/src/main/java/org/apache/servicecomb/toolkit/contractgen/DefaultContractsGenerator.java index 49dd5b9..e78abc5 100755 --- a/contractgen/src/main/java/org/apache/servicecomb/toolkit/contractgen/DefaultContractsGenerator.java +++ b/contractgen/src/main/java/org/apache/servicecomb/toolkit/contractgen/DefaultContractsGenerator.java @@ -30,29 +30,26 @@ import java.util.List; import java.util.Map; import java.util.Vector; -import org.apache.commons.lang3.StringUtils; +import javax.ws.rs.Path; + import org.apache.servicecomb.provider.pojo.RpcSchema; import org.apache.servicecomb.provider.rest.common.RestSchema; -import org.apache.servicecomb.swagger.SwaggerUtils; -import org.apache.servicecomb.swagger.generator.core.CompositeSwaggerGeneratorContext; -import org.apache.servicecomb.swagger.generator.core.SwaggerGenerator; -import org.apache.servicecomb.swagger.generator.core.SwaggerGeneratorContext; import org.apache.servicecomb.toolkit.ContractsGenerator; import org.apache.servicecomb.toolkit.common.ContractFileType; import org.apache.servicecomb.toolkit.common.ImmediateClassLoader; +import org.apache.servicecomb.toolkit.generator.OasGenerator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import javax.ws.rs.Path; +import io.swagger.v3.core.util.Yaml; +import io.swagger.v3.oas.models.OpenAPI; public class DefaultContractsGenerator implements ContractsGenerator { private static Logger LOGGER = LoggerFactory.getLogger(DefaultContractsGenerator.class); - private static CompositeSwaggerGeneratorContext compositeSwaggerGeneratorContext = new CompositeSwaggerGeneratorContext(); - private Map<String, Object> config; private List<String> classpathUrls; @@ -125,12 +122,14 @@ public class DefaultContractsGenerator implements ContractsGenerator { continue; } - SwaggerGeneratorContext generatorContext = - compositeSwaggerGeneratorContext.selectContext(loadClass); + OasGenerator oasGenerator = new OasGenerator(); + OpenAPI oas = oasGenerator.generate(loadClass); - SwaggerGenerator generator = new SwaggerGenerator(generatorContext, loadClass); + if (oas == null) { + continue; + } - String swaggerString = SwaggerUtils.swaggerToString(generator.generate()); + String oasPretty = Yaml.pretty(oas); File outputFile = new File( outputDir + File.separator + loadClass.getSimpleName() + contractfileType @@ -143,7 +142,7 @@ public class DefaultContractsGenerator implements ContractsGenerator { outputFile.createNewFile(); } - Files.write(Paths.get(outputFile.toURI()), swaggerString.getBytes()); + Files.write(Paths.get(outputFile.toURI()), oasPretty.getBytes()); } } catch (IOException e) { throw new RuntimeException(e); diff --git a/docgen/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsSwaggerUIGenerator.java b/docgen/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsSwaggerUIGenerator.java index 4277652..1bf2e7a 100755 --- a/docgen/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsSwaggerUIGenerator.java +++ b/docgen/src/main/java/org/apache/servicecomb/toolkit/docgen/ContractsSwaggerUIGenerator.java @@ -32,8 +32,8 @@ import org.apache.servicecomb.toolkit.DocGenerator; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import io.swagger.models.Swagger; -import io.swagger.util.Json; +import io.swagger.v3.core.util.Json; +import io.swagger.v3.oas.models.OpenAPI; public class ContractsSwaggerUIGenerator implements DocGenerator { @@ -43,7 +43,7 @@ public class ContractsSwaggerUIGenerator implements DocGenerator { private final static String DOC_SUFFIX = ".html"; - private Swagger contractContent; + private OpenAPI contractContent; private String outputPath = "."; @@ -55,7 +55,7 @@ public class ContractsSwaggerUIGenerator implements DocGenerator { @Override public void configure(Map<String, Object> config) { - this.contractContent = (Swagger) config.get("contractContent"); + this.contractContent = (OpenAPI) config.get("contractContent"); this.outputPath = (String) config.get("outputPath"); } diff --git a/docgen/src/test/java/org/apache/servicecomb/toolkit/docgen/ContractsSwaggerUIGeneratorTest.java b/docgen/src/test/java/org/apache/servicecomb/toolkit/docgen/ContractsSwaggerUIGeneratorTest.java index 46238be..e1c9662 100644 --- a/docgen/src/test/java/org/apache/servicecomb/toolkit/docgen/ContractsSwaggerUIGeneratorTest.java +++ b/docgen/src/test/java/org/apache/servicecomb/toolkit/docgen/ContractsSwaggerUIGeneratorTest.java @@ -33,16 +33,14 @@ import org.apache.servicecomb.toolkit.GeneratorFactory; import org.junit.Assert; import org.junit.Test; -import io.swagger.models.Swagger; -import io.swagger.parser.Swagger20Parser; +import io.swagger.parser.OpenAPIParser; +import io.swagger.v3.parser.core.models.SwaggerParseResult; public class ContractsSwaggerUIGeneratorTest { @Test public void testContractTransferToSwaggerUI() throws IOException { - Swagger20Parser swagger20Parser = new Swagger20Parser(); - InputStream in = ContractsSwaggerUIGeneratorTest.class.getClassLoader().getResourceAsStream("HelloEndPoint.yaml"); StringBuilder sb = new StringBuilder(); @@ -52,14 +50,15 @@ public class ContractsSwaggerUIGeneratorTest { sb.append(new String(bytes, 0, len)); } - Swagger swagger = swagger20Parser.parse(sb.toString()); + OpenAPIParser openAPIParser = new OpenAPIParser(); + SwaggerParseResult swaggerParseResult = openAPIParser.readContents(sb.toString(), null, null); Path tempDir = Files.createTempDirectory(null); Path outputPath = Paths.get(tempDir.toFile().getAbsolutePath() + File.separator + "swagger-ui.html"); DocGenerator docGenerator = GeneratorFactory.getGenerator(DocGenerator.class, "default"); Map<String, Object> docGeneratorConfig = new HashMap<>(); - docGeneratorConfig.put("contractContent", swagger); + docGeneratorConfig.put("contractContent", swaggerParseResult.getOpenAPI()); docGeneratorConfig.put("outputPath", outputPath.toFile().getCanonicalPath()); Objects.requireNonNull(docGenerator).configure(docGeneratorConfig); docGenerator.generate(); diff --git a/pom.xml b/pom.xml index 768f030..75c7d8c 100644 --- a/pom.xml +++ b/pom.xml @@ -111,6 +111,7 @@ <module>integration-tests</module> <module>contractgen</module> <module>oas-validator</module> + <module>oas-generator</module> </modules> <dependencyManagement> @@ -199,6 +200,29 @@ <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.apache.servicecomb.toolkit</groupId> + <artifactId>oas-generator-core</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> + <groupId>org.apache.servicecomb.toolkit</groupId> + <artifactId>oas-generator-servicecomb</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> + <groupId>org.apache.servicecomb.toolkit</groupId> + <artifactId>oas-generator-jaxrs</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> + <groupId>org.apache.servicecomb.toolkit</groupId> + <artifactId>oas-generator-spring</artifactId> + <version>${project.version}</version> + </dependency> </dependencies> </dependencyManagement> diff --git a/toolkit-distribution/src/release/LICENSE b/toolkit-distribution/src/release/LICENSE index af84657..ff090bc 100644 --- a/toolkit-distribution/src/release/LICENSE +++ b/toolkit-distribution/src/release/LICENSE @@ -307,6 +307,13 @@ You can find a copy of the License at licenses/LICENSE-cal10n * Compiler assisted localization library (CAL10N) - API (ch.qos.cal10n:cal10n-api:0.8.1 - http://cal10n.qos.ch/cal10n-api) * Compiler assisted localization library (CAL10N) - API (ch.qos.cal10n:cal10n-api:0.7.4 - http://cal10n.qos.ch/cal10n-api) +=========================================================================== +This product bundles of asm which is licensed under BSD 3-Clause License +For details, see https://github.com/hamcrest/JavaHamcrest/blob/master/LICENSE.txt +You can find a copy of the License at licenses/LICENSE-asm + +* asm (org.ow2.asm:asm:7.2 - http://asm.ow2.io/) + ================================================================ This product bundles the following libraries which are licensed under the Apache License v2. @@ -429,6 +436,8 @@ For details, see their respective project links. * org.xmlunit:xmlunit-core (org.xmlunit:xmlunit-core:2.6.2 - https://www.xmlunit.org/) * project ':json-path' (com.jayway.jsonpath:json-path:2.4.0 - https://github.com/jayway/JsonPath) * swagger-annotations (io.swagger.core.v3:swagger-annotations:2.0.8 - https://github.com/swagger-api/swagger-core/modules/swagger-annotations) +* Spring Web (org.springframework:spring-web:5.2.0.RELEASE - https://github.com/spring-projects/spring-framework) +* swagger-annotations (io.swagger:swagger-annotations:1.5.22 - https://github.com/swagger-api/swagger-core/modules/swagger-annotations) * swagger-annotations (io.swagger.core.v3:swagger-annotations:2.0.9 - https://github.com/swagger-api/swagger-core/modules/swagger-annotations) * swagger-annotations (io.swagger:swagger-annotations:1.5.22 - https://github.com/swagger-api/swagger-core/modules/swagger-annotations) * swagger-codegen (core library) (io.swagger:swagger-codegen:2.4.3 - https://github.com/swagger-api/swagger-codegen/modules/swagger-codegen) diff --git a/toolkit-maven-plugin/src/main/java/org/apache/servicecomb/toolkit/plugin/GenerateUtil.java b/toolkit-maven-plugin/src/main/java/org/apache/servicecomb/toolkit/plugin/GenerateUtil.java index 4a2f0b2..f0dbb00 100755 --- a/toolkit-maven-plugin/src/main/java/org/apache/servicecomb/toolkit/plugin/GenerateUtil.java +++ b/toolkit-maven-plugin/src/main/java/org/apache/servicecomb/toolkit/plugin/GenerateUtil.java @@ -35,7 +35,6 @@ import java.util.Optional; import org.apache.maven.artifact.DependencyResolutionRequiredException; import org.apache.maven.project.MavenProject; -import org.apache.servicecomb.swagger.SwaggerUtils; import org.apache.servicecomb.toolkit.CodeGenerator; import org.apache.servicecomb.toolkit.ContractsGenerator; import org.apache.servicecomb.toolkit.DocGenerator; @@ -45,6 +44,10 @@ import org.apache.servicecomb.toolkit.codegen.MicroServiceFramework; import org.apache.servicecomb.toolkit.codegen.ProjectMetaConstant; import org.openapitools.codegen.config.CodegenConfigurator; +import io.swagger.parser.OpenAPIParser; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.parser.core.models.SwaggerParseResult; + class GenerateUtil { private static String providerProjectNameSuffix = "-provider"; @@ -90,7 +93,13 @@ class GenerateUtil { } Map<String, Object> docGeneratorConfig = new HashMap<>(); - docGeneratorConfig.put("contractContent", SwaggerUtils.parseSwagger(file.toUri().toURL())); + SwaggerParseResult swaggerParseResult = new OpenAPIParser() + .readLocation(file.toUri().toURL().toString(), null, null); + OpenAPI openAPI = swaggerParseResult.getOpenAPI(); + if (openAPI == null) { + return super.visitFile(file, attrs); + } + docGeneratorConfig.put("contractContent", openAPI); docGeneratorConfig.put("outputPath", documentOutput + File.separator + file.getParent().toFile().getName() + File.separator + file.toFile() .getName()
