diff --git a/modules/swagger-parser-cli/pom.xml b/modules/swagger-parser-cli/pom.xml
new file mode 100644
index 0000000000..6dc74a4333
--- /dev/null
+++ b/modules/swagger-parser-cli/pom.xml
@@ -0,0 +1,75 @@
+
+
+
+ swagger-parser-project
+ io.swagger.parser.v3
+ 2.1.2-SNAPSHOT
+ ../..
+
+ 4.0.0
+
+ swagger-parser-cli
+ jar
+ swagger-parser (executable)
+
+
+ swagger-parser-cli
+
+
+ src/main/resources
+ true
+
+ logback.xml
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 2.3
+
+
+ process-resources
+ package
+
+ shade
+
+
+ false
+ true
+
+ ${java.io.tmpdir}/dependency-reduced-pom.xml
+
+
+
+
+
+
+
+
+
+
+
+
+
+ io.swagger.parser.v3
+ swagger-parser-v3
+ 2.1.2-SNAPSHOT
+ compile
+
+
+ org.testng
+ testng
+
+
+
+
+ 8
+ 8
+
+
+
\ No newline at end of file
diff --git a/modules/swagger-parser-cli/src/main/java/io/swagger/v3/parser/SwaggerParser.java b/modules/swagger-parser-cli/src/main/java/io/swagger/v3/parser/SwaggerParser.java
new file mode 100644
index 0000000000..8fa2ec402a
--- /dev/null
+++ b/modules/swagger-parser-cli/src/main/java/io/swagger/v3/parser/SwaggerParser.java
@@ -0,0 +1,31 @@
+package io.swagger.v3.parser;
+
+import io.swagger.v3.parser.core.models.SwaggerParseResult;
+import java.util.ArrayList;
+import java.util.List;
+
+public class SwaggerParser {
+ public static void main(String[] args) {
+ if (args.length > 0){
+ List messages = readFromLocation(args[0]);
+ if ( messages.size() > 0){
+ messages.forEach(System.out::println);
+ System.exit(1);
+ }
+ }
+ }
+
+ public static List readFromLocation(String location) {
+ List messages = new ArrayList<>();
+ try {
+ final SwaggerParseResult result = new OpenAPIV3Parser().readLocation(location, null, null);
+ if(result.getOpenAPI() == null || !result.getMessages().isEmpty()){
+ messages = result.getMessages();
+ }
+ }catch (Exception e){
+ e.printStackTrace();
+ System.exit(1);
+ }
+ return messages;
+ }
+}
\ No newline at end of file
diff --git a/modules/swagger-parser-cli/src/test/java/SwaggerParserCLITest.java b/modules/swagger-parser-cli/src/test/java/SwaggerParserCLITest.java
new file mode 100644
index 0000000000..fa68bd9568
--- /dev/null
+++ b/modules/swagger-parser-cli/src/test/java/SwaggerParserCLITest.java
@@ -0,0 +1,28 @@
+import io.swagger.v3.parser.SwaggerParser;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class SwaggerParserCLITest {
+ @Test
+ public void validateOKFromLocationTest(){
+ String []args = new String[1];
+ args[0] = "src/test/resources/fileWithNoErrorMessages.yaml";
+ Assert.assertTrue(SwaggerParser.readFromLocation(args[0]).size() == 0);
+ }
+
+ @Test
+ public void validateErrorFromLocationTest(){
+ String []args = new String[1];
+ args[0] = "src/test/resources/fileWithValidationErrorMessages.yaml";
+ Assert.assertEquals(SwaggerParser.readFromLocation(args[0]).get(0), "attribute info.version is missing");
+ Assert.assertEquals(SwaggerParser.readFromLocation(args[0]).get(1), "attribute paths.'/cu'(post).responses.200.description is missing");
+ }
+
+ @Test
+ public void validateFileNotFoundInLocationTest(){
+ String []args = new String[1];
+ args[0] = "src/test/resources/WrongLocation.yaml";
+ Assert.assertTrue(SwaggerParser.readFromLocation(args[0]).size() == 1);
+ Assert.assertEquals(SwaggerParser.readFromLocation(args[0]).get(0), "Unable to read location `src/test/resources/WrongLocation.yaml`");
+ }
+}
\ No newline at end of file
diff --git a/modules/swagger-parser-cli/src/test/resources/fileWithNoErrorMessages.yaml b/modules/swagger-parser-cli/src/test/resources/fileWithNoErrorMessages.yaml
new file mode 100644
index 0000000000..3378904b47
--- /dev/null
+++ b/modules/swagger-parser-cli/src/test/resources/fileWithNoErrorMessages.yaml
@@ -0,0 +1,55 @@
+openapi: 3.0.0
+info:
+ description: test
+ title: test
+ version: 1.0
+paths:
+ /cu:
+ post:
+ operationId: savecu
+ responses:
+ "200":
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/AbTestFoo"
+ "/bar":
+ put:
+ operationId: updateBar
+ responses:
+ "200":
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/CoTestBar"
+servers:
+ - url: /foo/bar
+components:
+ schemas:
+ Thing:
+ type: object
+ properties:
+ moreThings:
+ type: array
+ uniqueItems: true
+ items:
+ $ref: "#/components/schemas/ThingAs"
+ ThingAs:
+ type: object
+ properties:
+ concept:
+ $ref: "#/components/schemas/Thing"
+ AbTestFoo:
+ type: object
+ properties:
+ moreThings:
+ type: array
+ uniqueItems: true
+ items:
+ $ref: "#/components/schemas/ThingAs"
+ readOnly: true
+ CoTestBar:
+ allOf:
+ - $ref: "#/components/schemas/Thing"
\ No newline at end of file
diff --git a/modules/swagger-parser-cli/src/test/resources/fileWithValidationErrorMessages.yaml b/modules/swagger-parser-cli/src/test/resources/fileWithValidationErrorMessages.yaml
new file mode 100644
index 0000000000..8ef7d2fed8
--- /dev/null
+++ b/modules/swagger-parser-cli/src/test/resources/fileWithValidationErrorMessages.yaml
@@ -0,0 +1,53 @@
+openapi: 3.0.0
+info:
+ description: test
+ title: test
+paths:
+ /cu:
+ post:
+ operationId: savecu
+ responses:
+ "200":
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/AbTestFoo"
+ "/bar":
+ put:
+ operationId: updateBar
+ responses:
+ "200":
+ description: successful operation
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/CoTestBar"
+servers:
+ - url: /foo/bar
+components:
+ schemas:
+ Thing:
+ type: object
+ properties:
+ moreThings:
+ type: array
+ uniqueItems: true
+ items:
+ $ref: "#/components/schemas/ThingAs"
+ ThingAs:
+ type: object
+ properties:
+ concept:
+ $ref: "#/components/schemas/Thing"
+ AbTestFoo:
+ type: object
+ properties:
+ moreThings:
+ type: array
+ uniqueItems: true
+ items:
+ $ref: "#/components/schemas/ThingAs"
+ readOnly: true
+ CoTestBar:
+ allOf:
+ - $ref: "#/components/schemas/Thing"
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 27b0e8a579..985cf2294e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -377,6 +377,7 @@
modules/swagger-parser-v3
modules/swagger-parser-v2-converter
modules/swagger-parser
+ modules/swagger-parser-cli