This is an automated email from the ASF dual-hosted git repository. ningjiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/servicecomb-toolkit.git
commit 2646643159f51ea15aa3cd831b67596c3be85cf5 Author: Daniel Qian <chanjars...@gmail.com> AuthorDate: Fri Nov 1 15:11:01 2019 +0800 SCB-1553 Integrate oas-validator compliance check to cli refactor parse checker code, remove duplication --- .../compatibility/CompatibilityCheckParser.java | 36 +++++++++++++++++++ .../validators/OasCompatibilityTestBase.java | 17 ++++----- .../oasv/compliance/ComplianceCheckParser.java | 36 +++++++++++++++++++ .../validator/OasComplianceTestBase.java | 18 +++++----- .../oasv/util/DefaultOasSpecSyntaxChecker.java | 42 ---------------------- .../toolkit/oasv/util/OasSpecParseException.java | 39 -------------------- .../toolkit/oasv/util/OasSpecParser.java | 36 ------------------- .../toolkit/oasv/util/OasSpecSyntaxChecker.java | 36 ------------------- .../servicecomb/toolkit/oasv/OasSpecLoader.java | 9 +---- .../api/controller/CompatibilityController.java | 30 ++++------------ .../web/api/controller/ComplianceController.java | 36 ++++++------------- 11 files changed, 106 insertions(+), 229 deletions(-) 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 @@ public abstract class OasSpecLoader { * @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 java.util.Map; 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.RequestMapping; 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 @@ public class CompatibilityController { 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 @@ public class CompatibilityController { } 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 java.util.Map; 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.RequestMapping; 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 @@ public class ComplianceController { 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 @@ public class ComplianceController { 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);