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);
