[cli][gradle] Validate now uses parseOptions w/setResolve (#5471)

* [cli] Validate now uses parseOptions w/setResolve

The validate command now uses ParseOptions#setResolve(true) to match how
we parse in CodegenConfigurator and online's Generate. Without this
option, the OpenAPI 3 parser skips the "resolve" block, which made lead
to validations in the command not matching validations during
generation.

* [gradle] Validate now uses parseOptions w/setResolve

The Graldle validate command now uses ParseOptions#setResolve(true) to match how
we parse in CodegenConfigurator and online's Generate. Without this
option, the OpenAPI 3 parser skips the "resolve" block, which made lead
to validations in the command not matching validations during
generation.
This commit is contained in:
Jim Schubert 2020-03-01 04:26:13 -05:00 committed by GitHub
parent a03f7a58c3
commit f6f5c9b8b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 11 additions and 4 deletions

View File

@ -22,6 +22,7 @@ import io.airlift.airline.Option;
import io.swagger.parser.OpenAPIParser; import io.swagger.parser.OpenAPIParser;
import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.parser.core.models.ParseOptions;
import io.swagger.v3.parser.core.models.SwaggerParseResult; import io.swagger.v3.parser.core.models.SwaggerParseResult;
import org.apache.commons.lang3.text.WordUtils; import org.apache.commons.lang3.text.WordUtils;
import org.openapitools.codegen.validation.ValidationResult; import org.openapitools.codegen.validation.ValidationResult;
@ -45,8 +46,9 @@ public class Validate implements Runnable {
@Override @Override
public void run() { public void run() {
System.out.println("Validating spec (" + spec + ")"); System.out.println("Validating spec (" + spec + ")");
ParseOptions options = new ParseOptions();
SwaggerParseResult result = new OpenAPIParser().readLocation(spec, null, null); options.setResolve(true);
SwaggerParseResult result = new OpenAPIParser().readLocation(spec, null, options);
List<String> messageList = result.getMessages(); List<String> messageList = result.getMessages();
Set<String> errors = new HashSet<>(messageList); Set<String> errors = new HashSet<>(messageList);
Set<String> warnings = new HashSet<>(); Set<String> warnings = new HashSet<>();

View File

@ -19,12 +19,13 @@
package org.openapitools.generator.gradle.plugin.tasks package org.openapitools.generator.gradle.plugin.tasks
import io.swagger.parser.OpenAPIParser import io.swagger.parser.OpenAPIParser
import io.swagger.v3.parser.core.models.ParseOptions
import org.gradle.api.DefaultTask import org.gradle.api.DefaultTask
import org.gradle.api.GradleException import org.gradle.api.GradleException
import org.gradle.api.logging.Logging
import org.gradle.api.tasks.Internal import org.gradle.api.tasks.Internal
import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.options.Option import org.gradle.api.tasks.options.Option
import org.gradle.api.logging.Logging
import org.gradle.internal.logging.text.StyledTextOutput import org.gradle.internal.logging.text.StyledTextOutput
import org.gradle.internal.logging.text.StyledTextOutputFactory import org.gradle.internal.logging.text.StyledTextOutputFactory
import org.gradle.kotlin.dsl.property import org.gradle.kotlin.dsl.property
@ -71,7 +72,11 @@ open class ValidateTask : DefaultTask() {
val recommendations = recommend.get() val recommendations = recommend.get()
logger.quiet("Validating spec $spec") logger.quiet("Validating spec $spec")
val result = OpenAPIParser().readLocation(spec, null, null)
val options = ParseOptions()
options.isResolve = true
val result = OpenAPIParser().readLocation(spec, null, options)
val messages = result.messages.toSet() val messages = result.messages.toSet()
val out = services.get(StyledTextOutputFactory::class.java).create("openapi") val out = services.get(StyledTextOutputFactory::class.java).create("openapi")