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