Skip to content

Commit 0db5ed9

Browse files
committed
feat: allow disabling OAS 3.1 resolving
1 parent 19f7529 commit 0db5ed9

File tree

2 files changed

+30
-17
lines changed

2 files changed

+30
-17
lines changed

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/OpenAPIV3Parser.java

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,13 @@
3333
import javax.net.ssl.SSLHandshakeException;
3434
import org.apache.commons.io.FileUtils;
3535
import org.apache.commons.io.IOUtils;
36+
import org.apache.commons.lang3.StringUtils;
3637
import org.slf4j.Logger;
3738
import org.slf4j.LoggerFactory;
3839

3940
public class OpenAPIV3Parser implements SwaggerParserExtension {
41+
42+
public static final String DISABLE_OAS31_RESOLVE = "disableOas31Resolve";
4043
private static final Logger LOGGER = LoggerFactory.getLogger(OpenAPIV3Parser.class);
4144
private static ObjectMapper JSON_MAPPER, YAML_MAPPER;
4245
/**
@@ -206,28 +209,38 @@ private SwaggerParseResult resolve(SwaggerParseResult result, List<Authorization
206209
if (options != null) {
207210
if (options.isResolve() || options.isResolveFully()) {
208211
if (result.getOpenAPI().getOpenapi() != null && result.getOpenAPI().getOpenapi().startsWith("3.1")) {
209-
DereferencerContext dereferencerContext = new DereferencerContext(
210-
result,
211-
auth,
212-
location,
213-
options,
214-
null,
215-
null,
216-
true
217-
);
218-
List<OpenAPIDereferencer> dereferencers = DereferencersFactory.getInstance().getDereferencers();
219-
if (dereferencers.iterator().hasNext()) {
220-
OpenAPIDereferencer dereferencer = dereferencers.iterator().next();
221-
dereferencer.dereference(dereferencerContext, dereferencers.iterator());
212+
if (StringUtils.isBlank(System.getenv(DISABLE_OAS31_RESOLVE))) {
213+
DereferencerContext dereferencerContext = new DereferencerContext(
214+
result,
215+
auth,
216+
location,
217+
options,
218+
null,
219+
null,
220+
true
221+
);
222+
List<OpenAPIDereferencer> dereferencers = DereferencersFactory.getInstance().getDereferencers();
223+
if (dereferencers.iterator().hasNext()) {
224+
OpenAPIDereferencer dereferencer = dereferencers.iterator().next();
225+
dereferencer.dereference(dereferencerContext, dereferencers.iterator());
226+
}
227+
if (options.isResolveFully()) {
228+
new ResolverFully(options.isResolveCombinators()).resolveFully(result.getOpenAPI());
229+
}
230+
} else {
231+
String msg = "Resolution of OAS 3.1 spec disabled by 'disableOas31Resolve' env variable";
232+
LOGGER.warn(msg);
233+
result.getMessages().add(msg);
222234
}
223235
} else {
224236
OpenAPIResolver resolver = new OpenAPIResolver(result.getOpenAPI(), emptyListIfNull(auth),
225237
location, null, options);
226238
resolver.resolve(result);
239+
if (options.isResolveFully()) {
240+
new ResolverFully(options.isResolveCombinators()).resolveFully(result.getOpenAPI());
241+
}
227242
}
228-
if (options.isResolveFully()) {
229-
new ResolverFully(options.isResolveCombinators()).resolveFully(result.getOpenAPI());
230-
}
243+
231244
}
232245
if (options.isFlatten()) {
233246
final InlineModelResolver inlineModelResolver =

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@
406406
<swagger-parser-v2-version>1.0.64</swagger-parser-v2-version>
407407
<commons-io-version>2.11.0</commons-io-version>
408408
<slf4j-version>1.7.30</slf4j-version>
409-
<swagger-core-version>2.2.8-SNAPSHOT</swagger-core-version>
409+
<swagger-core-version>2.2.8</swagger-core-version>
410410
<swagger-core-v2-version>1.6.9</swagger-core-v2-version>
411411
<junit-version>4.13.2</junit-version>
412412
<testng-version>6.14.2</testng-version>

0 commit comments

Comments
 (0)