Skip to content

Commit 8578b58

Browse files
authored
Merge branch 'master' into issue-1454
2 parents 589c3f2 + 4a94617 commit 8578b58

File tree

16 files changed

+448
-53
lines changed

16 files changed

+448
-53
lines changed

.github/actions/action.yml

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
name: 'Swagger Parser'
2+
description: 'Parses, validates, dereferences an OpenAPI definition'
3+
inputs:
4+
inputSpec:
5+
description: 'path to OpenAPI definition file'
6+
required: true
7+
options:
8+
description: 'parser options'
9+
required: false
10+
serializationType:
11+
description: 'result file serialization type'
12+
required: false
13+
logsPath:
14+
description: 'path to validation result file'
15+
required: false
16+
parserSpecPath:
17+
description: 'output path of the serialized parsed definition'
18+
required: false
19+
parserVersion:
20+
description: 'parser version'
21+
required: false
22+
runs:
23+
using: "composite"
24+
steps:
25+
- id: java-version
26+
run: java -version 2>&1 | fgrep -i version | cut -d'"' -f2 | sed -e 's/^1\./1\%/' -e 's/\..*//' -e 's/%/./'
27+
shell: bash
28+
- name: Build Java
29+
if: steps.java-version == null || steps.java-version < 1.8
30+
uses: actions/setup-java@v3
31+
with:
32+
distribution: 'zulu'
33+
java-version: '11'
34+
- name: Download JAR
35+
run: curl -L 'https://repository.sonatype.org/service/local/artifact/maven/content?r=central-proxy&g=io.swagger.parser.v3&a=swagger-parser-cli&e=jar&v=${{ inputs.parserVersion }}' -o swagger-parser-cli.jar
36+
shell: bash
37+
- id: execute
38+
name: Execute Jar
39+
run: java -jar swagger-parser-cli.jar -i /home/runner/work/${{ inputs.inputSpec }} ${{ inputs.options }} ${{ inputs.serializationType }} -o /home/runner/work/${{ inputs.parserSpecPath }} -l /home/runner/work/${{ inputs.logsPath }}
40+
shell: bash

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ You can include this library from Sonatype OSS for SNAPSHOTS, or Maven central f
111111
<dependency>
112112
<groupId>io.swagger.parser.v3</groupId>
113113
<artifactId>swagger-parser</artifactId>
114-
<version>2.1.2</version>
114+
<version>2.1.3</version>
115115
</dependency>
116116
```
117117

modules/swagger-parser-cli/pom.xml

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>swagger-parser-project</artifactId>
77
<groupId>io.swagger.parser.v3</groupId>
8-
<version>2.1.3-SNAPSHOT</version>
8+
<version>2.1.4-SNAPSHOT</version>
99
<relativePath>../..</relativePath>
1010
</parent>
1111
<modelVersion>4.0.0</modelVersion>
@@ -69,13 +69,23 @@
6969
<dependency>
7070
<groupId>io.swagger.parser.v3</groupId>
7171
<artifactId>swagger-parser-v3</artifactId>
72-
<version>2.1.3-SNAPSHOT</version>
72+
<version>2.1.4-SNAPSHOT</version>
7373
<scope>compile</scope>
7474
</dependency>
7575
<dependency>
7676
<groupId>org.testng</groupId>
7777
<artifactId>testng</artifactId>
7878
</dependency>
79+
<dependency>
80+
<groupId>net.sourceforge.argparse4j</groupId>
81+
<artifactId>argparse4j</artifactId>
82+
<version>0.9.0</version>
83+
</dependency>
84+
<dependency>
85+
<groupId>org.slf4j</groupId>
86+
<artifactId>slf4j-simple</artifactId>
87+
<version>2.0.0</version>
88+
</dependency>
7989
</dependencies>
8090

8191
<properties>
Lines changed: 129 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,154 @@
11
package io.swagger.v3.parser;
22

3+
import io.swagger.v3.core.util.Json;
4+
import io.swagger.v3.core.util.Yaml;
5+
6+
import io.swagger.v3.parser.core.models.ParseOptions;
37
import io.swagger.v3.parser.core.models.SwaggerParseResult;
8+
import net.sourceforge.argparse4j.ArgumentParsers;
9+
import net.sourceforge.argparse4j.impl.Arguments;
10+
import net.sourceforge.argparse4j.inf.ArgumentParser;
11+
import net.sourceforge.argparse4j.inf.ArgumentParserException;
12+
import net.sourceforge.argparse4j.inf.Namespace;
13+
14+
15+
import java.io.OutputStream;
16+
import java.nio.file.Files;
17+
import java.nio.file.Paths;
418
import java.util.ArrayList;
519
import java.util.List;
620

21+
722
public class SwaggerParser {
23+
24+
public static final String RESOLVE = "resolve";
25+
public static final String RESOLVEFULLY = "resolvefully";
26+
public static final String FLATTEN = "flatten";
27+
public static final String JSON = "json";
28+
public static final String YAML = "yaml";
29+
public static final String LOG_ERRORS = "l";
30+
public static final String OUTPUT_FILE = "o";
31+
public static final String TRUE = "true";
32+
public static final String INPUT_FILE = "i";
33+
834
public static void main(String[] args) {
935
if (args.length > 0){
10-
List<String> messages = readFromLocation(args[0]);
11-
if ( messages.size() > 0){
12-
messages.forEach(System.out::println);
36+
ArgumentParser parser = ArgumentParsers.newFor("swagger-parser").build()
37+
.defaultHelp(true);
38+
parser.addArgument("-i")
39+
.dest(INPUT_FILE)
40+
.required(true)
41+
.type(String.class)
42+
.help("input file to be parsed");
43+
parser.addArgument("-resolve")
44+
.dest(RESOLVE)
45+
.type(Boolean.class)
46+
.action(Arguments.storeTrue())
47+
.setDefault(false)
48+
.help("resolve remote or local references");
49+
parser.addArgument("-resolveFully")
50+
.dest(RESOLVEFULLY)
51+
.type(Boolean.class)
52+
.action(Arguments.storeTrue())
53+
.setDefault(false)
54+
.help("");
55+
parser.addArgument("-flatten")
56+
.dest(FLATTEN)
57+
.type(Boolean.class)
58+
.action(Arguments.storeTrue())
59+
.setDefault(false)
60+
.help("");
61+
parser.addArgument("-o")
62+
.dest(OUTPUT_FILE)
63+
.type(String.class)
64+
.help("output file parsed");
65+
parser.addArgument("-l")
66+
.dest(LOG_ERRORS)
67+
.type(String.class)
68+
.help("output error logs");
69+
parser.addArgument("-json")
70+
.dest(JSON)
71+
.type(Boolean.class)
72+
.action(Arguments.storeTrue())
73+
.setDefault(false)
74+
.help("generate file as JSON");
75+
parser.addArgument("-yaml")
76+
.dest(YAML)
77+
.type(Boolean.class)
78+
.action(Arguments.storeTrue())
79+
.setDefault(false)
80+
.help("generate file as YAML");
81+
try{
82+
readFromLocation(parser.parseArgs(args));
83+
}catch (ArgumentParserException e) {
84+
parser.handleError(e);
1385
System.exit(1);
1486
}
1587
}
1688
}
1789

18-
public static List<String> readFromLocation(String location) {
90+
private static void generateMessagesFile(List<String> messages, Namespace arguments) {
91+
if ( messages != null && !messages.isEmpty() && arguments != null && arguments.getString(LOG_ERRORS) != null){
92+
if(arguments.getString(LOG_ERRORS) != null) {
93+
generateParsedFile(arguments, LOG_ERRORS, messages.toString());
94+
}
95+
}
96+
}
97+
98+
public static List<String> readFromLocation(Namespace args) {
1999
List<String> messages = new ArrayList<>();
100+
ParseOptions options;
20101
try {
21-
final SwaggerParseResult result = new OpenAPIV3Parser().readLocation(location, null, null);
102+
options = setOptions(args);
103+
final SwaggerParseResult result = new OpenAPIV3Parser().readLocation(args.get(INPUT_FILE), null, options);
104+
if(args.getString(OUTPUT_FILE) != null) {
105+
if (result.getOpenAPI() != null){
106+
String output;
107+
if(args.getString(JSON) != null && args.getString(JSON).equals(TRUE)){
108+
output = Json.pretty(result.getOpenAPI());
109+
}else if(args.getString(YAML) != null && args.getString(YAML).equals(TRUE)){
110+
output = Yaml.pretty(result.getOpenAPI());
111+
}else{
112+
output= Yaml.pretty(result.getOpenAPI());
113+
}
114+
generateParsedFile(args, OUTPUT_FILE, output );
115+
}
116+
}
22117
if(result.getOpenAPI() == null || !result.getMessages().isEmpty()){
23118
messages = result.getMessages();
119+
generateMessagesFile(messages, args);
24120
}
25121
}catch (Exception e){
26122
e.printStackTrace();
27-
System.exit(1);
28123
}
29124
return messages;
30125
}
126+
127+
private static void generateParsedFile(Namespace args, String o, String result) {
128+
try {
129+
if(result != null) {
130+
OutputStream out = Files.newOutputStream(Paths.get(args.getString(o)));
131+
byte[] specBytes = result.getBytes();
132+
out.write(specBytes);
133+
out.close();
134+
}
135+
}catch (Exception e){
136+
e.printStackTrace();
137+
}
138+
}
139+
140+
private static ParseOptions setOptions(Namespace parseOptions) {
141+
ParseOptions options = new ParseOptions();
142+
143+
if (parseOptions.getString(RESOLVE) !=null && parseOptions.getString(RESOLVE).equals(TRUE)) {
144+
options.setResolve(true);
145+
}
146+
if (parseOptions.getString(RESOLVEFULLY) != null && parseOptions.getString(RESOLVEFULLY).equals(TRUE)) {
147+
options.setResolveFully(true);
148+
}
149+
if (parseOptions.getString(FLATTEN) != null && parseOptions.getString(FLATTEN).equals(TRUE)) {
150+
options.setFlatten(true);
151+
}
152+
return options;
153+
}
31154
}

0 commit comments

Comments
 (0)