diff --git a/.gitignore b/.gitignore index 9af33e6d2f..846589f167 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ modules/swagger-parser/src/test/resources/relative-file-references/yaml **/test-output/* dependency-reduced-pom.xml *.pyc +/bin/ diff --git a/modules/swagger-parser-core/src/main/java/io/swagger/v3/parser/core/models/ParseOptions.java b/modules/swagger-parser-core/src/main/java/io/swagger/v3/parser/core/models/ParseOptions.java index 65bb3e6b37..ef45ea60b9 100644 --- a/modules/swagger-parser-core/src/main/java/io/swagger/v3/parser/core/models/ParseOptions.java +++ b/modules/swagger-parser-core/src/main/java/io/swagger/v3/parser/core/models/ParseOptions.java @@ -12,7 +12,9 @@ public class ParseOptions { private boolean validateExternalRefs = false; private boolean validateInternalRefs = true; private boolean legacyYamlDeserialization = false; - + private boolean resolveRequestBody = false; + private boolean resolveResponses = true; + public boolean isResolve() { return resolve; } @@ -36,6 +38,30 @@ public boolean isResolveFully() { public void setResolveFully(boolean resolveFully) { this.resolveFully = resolveFully; } + + public boolean isResolveRequestBody() { + return resolveRequestBody; + } + + /** + * If set to true, will help resolving the requestBody as inline, provided resolve is also set to true. + * Default is false because of the existing behaviour. + */ + public void setResolveRequestBody(boolean resolveRequestBody) { + this.resolveRequestBody = resolveRequestBody; + } + + public boolean isResolveResponses() { + return resolveResponses; + } + + /** + * If set to true, will help resolving the responses as inline, provided resolve is also set to true. + * Default is true because of the existing behaviour. + */ + public void setResolveResponses(boolean resolveResponses) { + this.resolveResponses = resolveResponses; + } public boolean isFlatten() { return flatten; } diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/ResolverCache.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/ResolverCache.java index a1e7ffffcb..5cf328ace9 100644 --- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/ResolverCache.java +++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/ResolverCache.java @@ -68,11 +68,10 @@ public class ResolverCache { private Map externalFileCache = new HashMap<>(); private List referencedModelKeys = new ArrayList<>(); private Set resolveValidationMessages; - private final ParseOptions parseOptions; - /* + /* a map that stores original external references, and their associated renamed references */ private Map renameCache = new HashMap<>(); @@ -394,4 +393,8 @@ public Map getExternalFileCache() { public Map getRenameCache() { return Collections.unmodifiableMap(renameCache); } + + public ParseOptions getParseOptions() { + return parseOptions; + } } diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/OperationProcessor.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/OperationProcessor.java index eef8765419..969dc3f589 100644 --- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/OperationProcessor.java +++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/OperationProcessor.java @@ -31,7 +31,6 @@ public OperationProcessor(ResolverCache cache, OpenAPI openAPI) { this.responseProcessor = new ResponseProcessor(cache,openAPI); this.requestBodyProcessor = new RequestBodyProcessor(cache,openAPI); this.externalRefProcessor = new ExternalRefProcessor(cache, openAPI); - this.cache = cache; } @@ -42,8 +41,8 @@ public void processOperation(Operation operation) { } RequestBody requestBody = operation.getRequestBody(); if(requestBody != null) { - //This part allows paser to put requestBody schema inline without the resolveFully option set to true - if (requestBody.get$ref() != null) { + //This part allows paser to put requestBody inline without the resolveFully option set to true + if (requestBody.get$ref() != null && cache != null && cache.getParseOptions() != null && cache.getParseOptions().isResolveRequestBody()) { requestBodyProcessor.processRequestBody(requestBody); RefFormat refFormat = computeRefFormat(requestBody.get$ref()); RequestBody resolvedRequestBody = cache.loadRef(requestBody.get$ref(), refFormat, RequestBody.class); @@ -62,8 +61,8 @@ public void processOperation(Operation operation) { for (String responseCode : responses.keySet()) { ApiResponse response = responses.get(responseCode); if(response != null) { - //This part allows parser to put response schema inline without the resolveFully option set to true - if (response.get$ref() != null) { + //This part allows parser to put response inline without the resolveFully option set to true + if (response.get$ref() != null && cache != null && cache.getParseOptions() != null && cache.getParseOptions().isResolveResponses()) { responseProcessor.processResponse(response);