use of io.swagger.v3.core.filter.SpecFilter in project swagger-core by swagger-api.
the class SwaggerMojo method execute.
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
if (skip) {
getLog().info("Skipping OpenAPI specification resolution");
return;
}
getLog().info("Resolving OpenAPI specification..");
if (project != null) {
String pEnc = project.getProperties().getProperty("project.build.sourceEncoding");
if (StringUtils.isNotBlank(pEnc)) {
projectEncoding = pEnc;
}
}
if (StringUtils.isBlank(encoding)) {
encoding = projectEncoding;
}
// read swagger configuration if one was provided
Optional<SwaggerConfiguration> swaggerConfiguration = readStructuredDataFromFile(configurationFilePath, SwaggerConfiguration.class, "configurationFilePath");
// read openApi config, if one was provided
Optional<OpenAPI> openAPIInput = readStructuredDataFromFile(openapiFilePath, OpenAPI.class, "openapiFilePath");
config = mergeConfig(openAPIInput.orElse(null), swaggerConfiguration.orElse(new SwaggerConfiguration()));
setDefaultsIfMissing(config);
try {
GenericOpenApiContextBuilder builder = new JaxrsOpenApiContextBuilder().openApiConfiguration(config);
if (StringUtils.isNotBlank(contextId)) {
builder.ctxId(contextId);
}
OpenApiContext context = builder.buildContext(true);
OpenAPI openAPI = context.read();
if (StringUtils.isNotBlank(config.getFilterClass())) {
try {
OpenAPISpecFilter filterImpl = (OpenAPISpecFilter) this.getClass().getClassLoader().loadClass(config.getFilterClass()).newInstance();
SpecFilter f = new SpecFilter();
openAPI = f.filter(openAPI, filterImpl, new HashMap<>(), new HashMap<>(), new HashMap<>());
} catch (Exception e) {
getLog().error("Error applying filter to API specification", e);
throw new MojoExecutionException("Error applying filter to API specification: " + e.getMessage(), e);
}
}
String openapiJson = null;
String openapiYaml = null;
if (Format.JSON.equals(outputFormat) || Format.JSONANDYAML.equals(outputFormat)) {
if (config.isPrettyPrint() != null && config.isPrettyPrint()) {
openapiJson = context.getOutputJsonMapper().writer(new DefaultPrettyPrinter()).writeValueAsString(openAPI);
} else {
openapiJson = context.getOutputJsonMapper().writeValueAsString(openAPI);
}
}
if (Format.YAML.equals(outputFormat) || Format.JSONANDYAML.equals(outputFormat)) {
if (config.isPrettyPrint() != null && config.isPrettyPrint()) {
openapiYaml = context.getOutputYamlMapper().writer(new DefaultPrettyPrinter()).writeValueAsString(openAPI);
} else {
openapiYaml = context.getOutputYamlMapper().writeValueAsString(openAPI);
}
}
Path path = Paths.get(outputPath, "temp");
final File parentFile = path.toFile().getParentFile();
if (parentFile != null) {
parentFile.mkdirs();
}
if (openapiJson != null) {
path = Paths.get(outputPath, outputFileName + ".json");
Files.write(path, openapiJson.getBytes(Charset.forName(encoding)));
getLog().info("JSON output: " + path.toFile().getCanonicalPath());
}
if (openapiYaml != null) {
path = Paths.get(outputPath, outputFileName + ".yaml");
Files.write(path, openapiYaml.getBytes(Charset.forName(encoding)));
getLog().info("YAML output: " + path.toFile().getCanonicalPath());
}
} catch (OpenApiConfigurationException e) {
getLog().error("Error resolving API specification", e);
throw new MojoFailureException(e.getMessage(), e);
} catch (IOException e) {
getLog().error("Error writing API specification", e);
throw new MojoExecutionException("Failed to write API definition", e);
} catch (Exception e) {
getLog().error("Error resolving API specification", e);
throw new MojoExecutionException(e.getMessage(), e);
}
}
use of io.swagger.v3.core.filter.SpecFilter in project swagger-core by swagger-api.
the class SwaggerLoader method resolve.
public Map<String, String> resolve() throws Exception {
Set<String> ignoredRoutesSet = null;
if (StringUtils.isNotBlank(ignoredRoutes)) {
ignoredRoutesSet = new HashSet<>(Arrays.asList(ignoredRoutes.split(",")));
}
Set<String> resourceClassesSet = null;
if (StringUtils.isNotBlank(resourceClasses)) {
resourceClassesSet = new HashSet<>(Arrays.asList(resourceClasses.split(",")));
}
Set<String> resourcePackagesSet = null;
if (StringUtils.isNotBlank(resourcePackages)) {
resourcePackagesSet = new HashSet<>(Arrays.asList(resourcePackages.split(",")));
}
LinkedHashSet<String> modelConverterSet = null;
if (StringUtils.isNotBlank(modelConverterClasses)) {
modelConverterSet = new LinkedHashSet<>(Arrays.asList(modelConverterClasses.split(",")));
}
OpenAPI openAPIInput = null;
if (StringUtils.isNotBlank(openapiAsString)) {
try {
openAPIInput = Json.mapper().readValue(openapiAsString, OpenAPI.class);
} catch (Exception e) {
try {
openAPIInput = Yaml.mapper().readValue(openapiAsString, OpenAPI.class);
} catch (Exception e1) {
throw new Exception("Error reading/deserializing openapi input: " + e.getMessage(), e);
}
}
}
SwaggerConfiguration config = new SwaggerConfiguration().filterClass(filterClass).ignoredRoutes(ignoredRoutesSet).prettyPrint(prettyPrint).readAllResources(readAllResources).openAPI(openAPIInput).readerClass(readerClass).scannerClass(scannerClass).resourceClasses(resourceClassesSet).resourcePackages(resourcePackagesSet).objectMapperProcessorClass(objectMapperProcessorClass).modelConverterClasses(modelConverterSet).sortOutput(sortOutput).alwaysResolveAppPath(alwaysResolveAppPath);
try {
GenericOpenApiContextBuilder builder = new JaxrsOpenApiContextBuilder().openApiConfiguration(config);
if (StringUtils.isNotBlank(contextId)) {
builder.ctxId(contextId);
}
OpenApiContext context = builder.buildContext(true);
OpenAPI openAPI = context.read();
if (StringUtils.isNotBlank(filterClass)) {
try {
OpenAPISpecFilter filterImpl = (OpenAPISpecFilter) this.getClass().getClassLoader().loadClass(filterClass).newInstance();
SpecFilter f = new SpecFilter();
openAPI = f.filter(openAPI, filterImpl, new HashMap<>(), new HashMap<>(), new HashMap<>());
} catch (Exception e) {
throw new Exception("Error applying filter to API specification: " + e.getMessage(), e);
}
}
String openapiJson = null;
String openapiYaml = null;
if ("JSON".equals(outputFormat) || "JSONANDYAML".equals(outputFormat)) {
if (prettyPrint != null && prettyPrint) {
openapiJson = context.getOutputJsonMapper().writer(new DefaultPrettyPrinter()).writeValueAsString(openAPI);
} else {
openapiJson = context.getOutputJsonMapper().writeValueAsString(openAPI);
}
}
if ("YAML".equals(outputFormat) || "JSONANDYAML".equals(outputFormat)) {
if (prettyPrint != null && prettyPrint) {
openapiYaml = context.getOutputYamlMapper().writer(new DefaultPrettyPrinter()).writeValueAsString(openAPI);
} else {
openapiYaml = context.getOutputYamlMapper().writeValueAsString(openAPI);
}
}
Map<String, String> map = new HashMap<>();
map.put("JSON", openapiJson);
map.put("YAML", openapiYaml);
return map;
} catch (OpenApiConfigurationException e) {
throw new Exception("Error resolving API specification: " + e.getMessage(), e);
} catch (Exception e) {
throw new Exception("Error resolving API specification: " + e.getMessage(), e);
}
}
use of io.swagger.v3.core.filter.SpecFilter in project swagger-core by swagger-api.
the class SpecFilterTest method cloneEverything.
@Test(description = "it should clone everything")
public void cloneEverything() throws IOException {
final OpenAPI openAPI = getOpenAPI(RESOURCE_PATH);
final OpenAPI filtered = new SpecFilter().filter(openAPI, new NoOpOperationsFilter(), null, null, null);
assertEquals(Json.pretty(filtered), Json.pretty(openAPI));
}
use of io.swagger.v3.core.filter.SpecFilter in project swagger-core by swagger-api.
the class SpecFilterTest method shouldContainAllTopLevelTags.
@Test(description = "it should contain all tags in the top level OpenAPI object")
public void shouldContainAllTopLevelTags() throws IOException {
final OpenAPI openAPI = getOpenAPI(RESOURCE_REFERRED_SCHEMAS);
final NoOpOperationsFilter filter = new NoOpOperationsFilter();
final OpenAPI filtered = new SpecFilter().filter(openAPI, filter, null, null, null);
assertEquals(getTagNames(filtered), Sets.newHashSet(PET_TAG, USER_TAG, STORE_TAG));
}
use of io.swagger.v3.core.filter.SpecFilter in project swagger-core by swagger-api.
the class SpecFilterTest method filterAwayPetResource.
@Test(description = "it should filter away the pet resource")
public void filterAwayPetResource() throws IOException {
final OpenAPI openAPI = getOpenAPI(RESOURCE_PATH);
final NoPetOperationsFilter filter = new NoPetOperationsFilter();
final OpenAPI filtered = new SpecFilter().filter(openAPI, filter, null, null, null);
if (filtered.getPaths() != null) {
for (Map.Entry<String, PathItem> entry : filtered.getPaths().entrySet()) {
assertNull(entry.getValue().getDelete());
assertNull(entry.getValue().getPost());
assertNull(entry.getValue().getPut());
assertNull(entry.getValue().getGet());
assertNull(entry.getValue().getHead());
assertNull(entry.getValue().getOptions());
}
} else {
fail("paths should not be null");
}
}
Aggregations