switch to oas-generator

Signed-off-by: kakulisen <18813972746@163.com>
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.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 @@
           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 @@
           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.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 @@
 
   private final static String DOC_SUFFIX = ".html";
 
-  private Swagger contractContent;
+  private OpenAPI contractContent;
 
   private String outputPath = ".";
 
@@ -55,7 +55,7 @@
 
   @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.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 @@
       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 @@
 * 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 @@
 * 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 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.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 @@
         }
         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()