SCB-1553 Integrate oas-validator compliance check to cli
refactor parse checker code, remove duplication
diff --git a/oas-validator/oas-validator-compatibility/src/main/java/org/apache/servicecomb/toolkit/oasv/compatibility/CompatibilityCheckParser.java b/oas-validator/oas-validator-compatibility/src/main/java/org/apache/servicecomb/toolkit/oasv/compatibility/CompatibilityCheckParser.java
new file mode 100644
index 0000000..18fa225
--- /dev/null
+++ b/oas-validator/oas-validator-compatibility/src/main/java/org/apache/servicecomb/toolkit/oasv/compatibility/CompatibilityCheckParser.java
@@ -0,0 +1,36 @@
+package org.apache.servicecomb.toolkit.oasv.compatibility;
+
+import static java.util.Collections.emptyList;
+
+import java.util.List;
+
+import io.swagger.v3.parser.OpenAPIV3Parser;
+import io.swagger.v3.parser.core.models.ParseOptions;
+import io.swagger.v3.parser.core.models.SwaggerParseResult;
+
+public abstract class CompatibilityCheckParser {
+
+  private CompatibilityCheckParser() {
+    // singleton
+  }
+
+  public static SwaggerParseResult parseYaml(String yaml) {
+    OpenAPIV3Parser parser = new OpenAPIV3Parser();
+    return parser.readContents(yaml, null, createParseOptions());
+  }
+
+  public static List<String> checkSyntax(String yaml) {
+    SwaggerParseResult result = parseYaml(yaml);
+    return result.getMessages() == null ? emptyList() : result.getMessages();
+  }
+
+  private static ParseOptions createParseOptions() {
+
+    ParseOptions parseOptions = new ParseOptions();
+    parseOptions.setResolve(true);
+    parseOptions.setResolveCombinators(true);
+    parseOptions.setResolveFully(true);
+    parseOptions.setFlatten(false);
+    return parseOptions;
+  }
+}
diff --git a/oas-validator/oas-validator-compatibility/src/test/java/org/apache/servicecomb/toolkit/oasv/compatibility/validators/OasCompatibilityTestBase.java b/oas-validator/oas-validator-compatibility/src/test/java/org/apache/servicecomb/toolkit/oasv/compatibility/validators/OasCompatibilityTestBase.java
index efbf135..0713c2a 100755
--- a/oas-validator/oas-validator-compatibility/src/test/java/org/apache/servicecomb/toolkit/oasv/compatibility/validators/OasCompatibilityTestBase.java
+++ b/oas-validator/oas-validator-compatibility/src/test/java/org/apache/servicecomb/toolkit/oasv/compatibility/validators/OasCompatibilityTestBase.java
@@ -17,21 +17,18 @@
 
 package org.apache.servicecomb.toolkit.oasv.compatibility.validators;
 
+import org.apache.servicecomb.toolkit.oasv.compatibility.CompatibilityCheckParser;
 import org.apache.servicecomb.toolkit.oasv.diffvalidation.test.OasDiffValidatorTestBase;
-import io.swagger.v3.parser.core.models.ParseOptions;
+
+import io.swagger.v3.parser.core.models.SwaggerParseResult;
+import io.swagger.v3.parser.util.ClasspathHelper;
 
 public class OasCompatibilityTestBase extends OasDiffValidatorTestBase {
 
   @Override
-  protected ParseOptions createParseOptions() {
-
-    ParseOptions parseOptions = new ParseOptions();
-    parseOptions.setResolve(true);
-    parseOptions.setResolveCombinators(true);
-    parseOptions.setResolveFully(true);
-    parseOptions.setFlatten(false);
-    return parseOptions;
-
+  protected SwaggerParseResult parseAbsolute(String classpath) {
+    String content = ClasspathHelper.loadFileFromClasspath(classpath);
+    return CompatibilityCheckParser.parseYaml(content);
   }
 
 }
diff --git a/oas-validator/oas-validator-compliance/src/main/java/org/apache/servicecomb/toolkit/oasv/compliance/ComplianceCheckParser.java b/oas-validator/oas-validator-compliance/src/main/java/org/apache/servicecomb/toolkit/oasv/compliance/ComplianceCheckParser.java
new file mode 100644
index 0000000..ad08cff
--- /dev/null
+++ b/oas-validator/oas-validator-compliance/src/main/java/org/apache/servicecomb/toolkit/oasv/compliance/ComplianceCheckParser.java
@@ -0,0 +1,36 @@
+package org.apache.servicecomb.toolkit.oasv.compliance;
+
+import static java.util.Collections.emptyList;
+
+import java.util.List;
+
+import io.swagger.v3.parser.OpenAPIV3Parser;
+import io.swagger.v3.parser.core.models.ParseOptions;
+import io.swagger.v3.parser.core.models.SwaggerParseResult;
+
+public abstract class ComplianceCheckParser {
+
+  private ComplianceCheckParser() {
+    // singleton
+  }
+
+  public static SwaggerParseResult parseYaml(String yaml) {
+    OpenAPIV3Parser parser = new OpenAPIV3Parser();
+    return parser.readContents(yaml, null, createParseOptions());
+  }
+
+  public static List<String> checkSyntax(String yaml) {
+    SwaggerParseResult result = parseYaml(yaml);
+    return result.getMessages() == null ? emptyList() : result.getMessages();
+  }
+
+  private static ParseOptions createParseOptions() {
+
+    ParseOptions parseOptions = new ParseOptions();
+    parseOptions.setResolve(true);
+    parseOptions.setResolveCombinators(false);
+    parseOptions.setResolveFully(false);
+    parseOptions.setFlatten(false);
+    return parseOptions;
+  }
+}
diff --git a/oas-validator/oas-validator-compliance/src/test/java/org/apache/servicecomb/toolkit/oasv/compliance/validator/OasComplianceTestBase.java b/oas-validator/oas-validator-compliance/src/test/java/org/apache/servicecomb/toolkit/oasv/compliance/validator/OasComplianceTestBase.java
index e3861e8..89c0312 100755
--- a/oas-validator/oas-validator-compliance/src/test/java/org/apache/servicecomb/toolkit/oasv/compliance/validator/OasComplianceTestBase.java
+++ b/oas-validator/oas-validator-compliance/src/test/java/org/apache/servicecomb/toolkit/oasv/compliance/validator/OasComplianceTestBase.java
@@ -17,20 +17,18 @@
 
 package org.apache.servicecomb.toolkit.oasv.compliance.validator;
 
+import org.apache.servicecomb.toolkit.oasv.compliance.ComplianceCheckParser;
 import org.apache.servicecomb.toolkit.oasv.validation.test.OasValidatorTestBase;
-import io.swagger.v3.parser.core.models.ParseOptions;
+
+import io.swagger.v3.parser.core.models.SwaggerParseResult;
+import io.swagger.v3.parser.util.ClasspathHelper;
 
 public class OasComplianceTestBase extends OasValidatorTestBase {
 
   @Override
-  protected ParseOptions createParseOptions() {
-
-    ParseOptions parseOptions = new ParseOptions();
-    parseOptions.setResolve(true);
-    parseOptions.setResolveCombinators(false);
-    parseOptions.setResolveFully(false);
-    parseOptions.setFlatten(false);
-    return parseOptions;
-
+  protected SwaggerParseResult parseAbsolute(String classpath) {
+    String content = ClasspathHelper.loadFileFromClasspath(classpath);
+    return ComplianceCheckParser.parseYaml(content);
   }
+
 }
diff --git a/oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/util/DefaultOasSpecSyntaxChecker.java b/oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/util/DefaultOasSpecSyntaxChecker.java
deleted file mode 100755
index cd1de49..0000000
--- a/oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/util/DefaultOasSpecSyntaxChecker.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.toolkit.oasv.util;
-
-import io.swagger.v3.parser.core.models.ParseOptions;
-import io.swagger.v3.parser.core.models.SwaggerParseResult;
-
-import java.util.List;
-
-import static java.util.Collections.emptyList;
-
-public class DefaultOasSpecSyntaxChecker implements OasSpecSyntaxChecker {
-
-  @Override
-  public List<String> check(String oasSpecContent) {
-
-    ParseOptions parseOptions = new ParseOptions();
-    parseOptions.setResolve(false);
-    parseOptions.setResolveFully(false);
-    parseOptions.setResolveCombinators(false);
-    parseOptions.setFlatten(false);
-    SwaggerParseResult result = OasSpecParser.parse(oasSpecContent, parseOptions);
-    return result.getMessages() == null ? emptyList() : result.getMessages();
-
-  }
-
-}
diff --git a/oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/util/OasSpecParseException.java b/oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/util/OasSpecParseException.java
deleted file mode 100755
index a263968..0000000
--- a/oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/util/OasSpecParseException.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * 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.toolkit.oasv.util;
-
-public class OasSpecParseException extends RuntimeException {
-  public OasSpecParseException() {
-  }
-
-  public OasSpecParseException(String message) {
-    super(message);
-  }
-
-  public OasSpecParseException(String message, Throwable cause) {
-    super(message, cause);
-  }
-
-  public OasSpecParseException(Throwable cause) {
-    super(cause);
-  }
-
-  public OasSpecParseException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
-    super(message, cause, enableSuppression, writableStackTrace);
-  }
-}
diff --git a/oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/util/OasSpecParser.java b/oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/util/OasSpecParser.java
deleted file mode 100755
index 03ecccc..0000000
--- a/oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/util/OasSpecParser.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.toolkit.oasv.util;
-
-import io.swagger.v3.parser.OpenAPIV3Parser;
-import io.swagger.v3.parser.core.models.ParseOptions;
-import io.swagger.v3.parser.core.models.SwaggerParseResult;
-
-public abstract class OasSpecParser {
-
-  private OasSpecParser() {
-    // singleton
-  }
-
-  public static SwaggerParseResult parse(String oasSpecContent, ParseOptions parseOptions) {
-    OpenAPIV3Parser parser = new OpenAPIV3Parser();
-    SwaggerParseResult swaggerParseResult = parser.readContents(oasSpecContent, null, parseOptions);
-    return swaggerParseResult;
-  }
-
-}
diff --git a/oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/util/OasSpecSyntaxChecker.java b/oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/util/OasSpecSyntaxChecker.java
deleted file mode 100755
index 7b07281..0000000
--- a/oas-validator/oas-validator-core/src/main/java/org/apache/servicecomb/toolkit/oasv/util/OasSpecSyntaxChecker.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.toolkit.oasv.util;
-
-import java.util.List;
-
-/**
- * <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#openapi-specification">OAS Spec</a>的语法检查器。
- * 只检查属性名是否正确
- */
-public interface OasSpecSyntaxChecker {
-
-  /**
-   * 检查语法错误
-   *
-   * @param oasSpecContent
-   * @return 语法错误消息,如果是empty,则代表没有语法错误
-   */
-  List<String> check(String oasSpecContent);
-
-}
diff --git a/oas-validator/oas-validator-test/src/main/java/org/apache/servicecomb/toolkit/oasv/OasSpecLoader.java b/oas-validator/oas-validator-test/src/main/java/org/apache/servicecomb/toolkit/oasv/OasSpecLoader.java
index db01a70..009c303 100755
--- a/oas-validator/oas-validator-test/src/main/java/org/apache/servicecomb/toolkit/oasv/OasSpecLoader.java
+++ b/oas-validator/oas-validator-test/src/main/java/org/apache/servicecomb/toolkit/oasv/OasSpecLoader.java
@@ -33,15 +33,8 @@
    * @param classpath
    * @return
    */
-  protected final SwaggerParseResult parseAbsolute(String classpath) {
+  protected abstract SwaggerParseResult parseAbsolute(String classpath);
 
-    String content = ClasspathHelper.loadFileFromClasspath(classpath);
-    OpenAPIV3Parser parser = new OpenAPIV3Parser();
-    return parser.readContents(content, null, createParseOptions());
-
-  }
-
-  protected abstract ParseOptions createParseOptions();
 
   /**
    * 加载绝对路径下的文件
diff --git a/oas-validator/oas-validator-web/src/main/java/org/apache/servicecomb/toolkit/oasv/web/api/controller/CompatibilityController.java b/oas-validator/oas-validator-web/src/main/java/org/apache/servicecomb/toolkit/oasv/web/api/controller/CompatibilityController.java
index 99662e1..5a045ee 100755
--- a/oas-validator/oas-validator-web/src/main/java/org/apache/servicecomb/toolkit/oasv/web/api/controller/CompatibilityController.java
+++ b/oas-validator/oas-validator-web/src/main/java/org/apache/servicecomb/toolkit/oasv/web/api/controller/CompatibilityController.java
@@ -23,6 +23,10 @@
 
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.servicecomb.toolkit.oasv.compatibility.CompatibilityCheckParser;
+import org.apache.servicecomb.toolkit.oasv.diffvalidation.api.OasDiffValidationContext;
+import org.apache.servicecomb.toolkit.oasv.diffvalidation.api.OasDiffViolation;
+import org.apache.servicecomb.toolkit.oasv.diffvalidation.api.OasSpecDiffValidator;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.util.MimeTypeUtils;
@@ -32,23 +36,13 @@
 import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestController;
 
-import org.apache.servicecomb.toolkit.oasv.diffvalidation.api.OasDiffValidationContext;
-import org.apache.servicecomb.toolkit.oasv.diffvalidation.api.OasDiffViolation;
-import org.apache.servicecomb.toolkit.oasv.diffvalidation.api.OasSpecDiffValidator;
-import org.apache.servicecomb.toolkit.oasv.util.DefaultOasSpecSyntaxChecker;
-import org.apache.servicecomb.toolkit.oasv.util.OasSpecSyntaxChecker;
-
 import io.swagger.v3.oas.models.OpenAPI;
-import io.swagger.v3.parser.OpenAPIV3Parser;
-import io.swagger.v3.parser.core.models.ParseOptions;
 import io.swagger.v3.parser.core.models.SwaggerParseResult;
 
 @RestController
 @RequestMapping("/api/compatibility")
 public class CompatibilityController {
 
-  private OasSpecSyntaxChecker oasSpecSyntaxChecker = new DefaultOasSpecSyntaxChecker();
-
   @Autowired
   private OasSpecDiffValidator oasSpecDiffValidator;
 
@@ -72,8 +66,8 @@
     String leftYaml = yaml.split("---\n")[0];
     String rightYaml = yaml.split("---\n")[1];
 
-    importError.addLeftParseErrors(oasSpecSyntaxChecker.check(leftYaml));
-    importError.addRightParseErrors(oasSpecSyntaxChecker.check(rightYaml));
+    importError.addLeftParseErrors(CompatibilityCheckParser.checkSyntax(leftYaml));
+    importError.addRightParseErrors(CompatibilityCheckParser.checkSyntax(rightYaml));
 
     if (importError.isNotEmpty()) {
       return importError;
@@ -91,24 +85,14 @@
   }
 
   private OpenAPI loadByYaml(String yaml) {
-    OpenAPIV3Parser parser = new OpenAPIV3Parser();
-    SwaggerParseResult parseResult = parser.readContents(yaml, null, createParseOptions());
+    SwaggerParseResult parseResult = CompatibilityCheckParser.parseYaml(yaml);
     if (CollectionUtils.isNotEmpty(parseResult.getMessages())) {
       throw new RuntimeException(StringUtils.join(parseResult.getMessages(), ","));
     }
     return parseResult.getOpenAPI();
   }
 
-  private ParseOptions createParseOptions() {
 
-    ParseOptions parseOptions = new ParseOptions();
-    parseOptions.setResolve(true);
-    parseOptions.setResolveCombinators(true);
-    parseOptions.setResolveFully(true);
-    parseOptions.setFlatten(false);
-    return parseOptions;
-
-  }
   
   private OasDiffValidationContext createContext(OpenAPI leftOpenAPI, OpenAPI rightOpenAPI) {
 
diff --git a/oas-validator/oas-validator-web/src/main/java/org/apache/servicecomb/toolkit/oasv/web/api/controller/ComplianceController.java b/oas-validator/oas-validator-web/src/main/java/org/apache/servicecomb/toolkit/oasv/web/api/controller/ComplianceController.java
index 8149344..e6b5c99 100755
--- a/oas-validator/oas-validator-web/src/main/java/org/apache/servicecomb/toolkit/oasv/web/api/controller/ComplianceController.java
+++ b/oas-validator/oas-validator-web/src/main/java/org/apache/servicecomb/toolkit/oasv/web/api/controller/ComplianceController.java
@@ -23,6 +23,10 @@
 
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.servicecomb.toolkit.oasv.compliance.ComplianceCheckParser;
+import org.apache.servicecomb.toolkit.oasv.validation.api.OasSpecValidator;
+import org.apache.servicecomb.toolkit.oasv.validation.api.OasValidationContext;
+import org.apache.servicecomb.toolkit.oasv.validation.api.OasViolation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.util.MimeTypeUtils;
@@ -32,23 +36,13 @@
 import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestController;
 
-import org.apache.servicecomb.toolkit.oasv.util.DefaultOasSpecSyntaxChecker;
-import org.apache.servicecomb.toolkit.oasv.util.OasSpecSyntaxChecker;
-import org.apache.servicecomb.toolkit.oasv.validation.api.OasSpecValidator;
-import org.apache.servicecomb.toolkit.oasv.validation.api.OasValidationContext;
-import org.apache.servicecomb.toolkit.oasv.validation.api.OasViolation;
-
 import io.swagger.v3.oas.models.OpenAPI;
-import io.swagger.v3.parser.OpenAPIV3Parser;
-import io.swagger.v3.parser.core.models.ParseOptions;
 import io.swagger.v3.parser.core.models.SwaggerParseResult;
 
 @RestController
 @RequestMapping("/api/compliance")
 public class ComplianceController {
 
-  private OasSpecSyntaxChecker oasSpecSyntaxChecker = new DefaultOasSpecSyntaxChecker();
-
   @Autowired
   private OasSpecValidator oasSpecValidator;
   
@@ -70,11 +64,16 @@
   private ImportError doValidate(String yaml) {
 
     ImportError importError = new ImportError();
-    importError.addParseErrors(oasSpecSyntaxChecker.check(yaml));
+    importError.addParseErrors(ComplianceCheckParser.checkSyntax(yaml));
     if (importError.isNotEmpty()) {
       return importError;
     }
 
+    SwaggerParseResult parseResult = ComplianceCheckParser.parseYaml(yaml);
+    if (CollectionUtils.isNotEmpty(parseResult.getMessages())) {
+      throw new RuntimeException(StringUtils.join(parseResult.getMessages(), ","));
+    }
+
     OpenAPI openAPI = loadByYaml(yaml);
     List<OasViolation> violations = oasSpecValidator.validate(createContext(openAPI), openAPI);
     if (CollectionUtils.isNotEmpty(violations)) {
@@ -84,27 +83,14 @@
     return importError;
   }
 
-
   private OpenAPI loadByYaml(String yaml) {
-    OpenAPIV3Parser parser = new OpenAPIV3Parser();
-    SwaggerParseResult parseResult = parser.readContents(yaml, null, createParseOptions());
+    SwaggerParseResult parseResult = ComplianceCheckParser.parseYaml(yaml);
     if (CollectionUtils.isNotEmpty(parseResult.getMessages())) {
       throw new RuntimeException(StringUtils.join(parseResult.getMessages(), ","));
     }
     return parseResult.getOpenAPI();
   }
   
-  private ParseOptions createParseOptions() {
-
-    ParseOptions parseOptions = new ParseOptions();
-    parseOptions.setResolve(true);
-    parseOptions.setResolveCombinators(false);
-    parseOptions.setResolveFully(false);
-    parseOptions.setFlatten(false);
-    return parseOptions;
-
-  }
-  
   private OasValidationContext createContext(OpenAPI openAPI) {
 
     OasValidationContext oasValidationContext = new OasValidationContext(openAPI);