diff --git a/modules/swagger-gradle-plugin/README.md b/modules/swagger-gradle-plugin/README.md index 8a3e218cd5..4aa084fd53 100644 --- a/modules/swagger-gradle-plugin/README.md +++ b/modules/swagger-gradle-plugin/README.md @@ -64,6 +64,8 @@ Parameter | Description | Required | Default `scannerClass`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| `readAllResources`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| `ignoredRoutes`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| +`objectMapperProcessorClass`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| +`modelConverterClasses`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| *** diff --git a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java index ae27874d40..27fbcb2322 100644 --- a/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java +++ b/modules/swagger-gradle-plugin/src/main/java/io/swagger/v3/plugins/gradle/tasks/ResolveTask.java @@ -24,6 +24,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.Collection; +import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; @@ -58,6 +59,9 @@ public enum Format {JSON, YAML, JSONANDYAML}; private String encoding = "UTF-8"; + private LinkedHashSet modelConverterClasses; + private String objectMapperProcessorClass; + @Input @Optional public String getOutputFileName() { @@ -139,6 +143,22 @@ public void setResourcePackages(Set resourcePackages) { this.resourcePackages = resourcePackages; } + /** + * @since 2.0.6 + */ + @Input + @Optional + public LinkedHashSet getModelConverterClasses() { + return modelConverterClasses; + } + + /** + * @since 2.0.6 + */ + public void setModelConverterClasses(LinkedHashSet modelConverterClasses) { + this.modelConverterClasses = modelConverterClasses; + } + @Input @Optional public Set getResourceClasses() { @@ -169,6 +189,22 @@ public void setReaderClass(String readerClass) { this.readerClass = readerClass; } + /** + * @since 2.0.6 + */ + @Input + @Optional + public String getObjectMapperProcessorClass() { + return objectMapperProcessorClass; + } + + /** + * @since 2.0.6 + */ + public void setObjectMapperProcessorClass(String objectMapperProcessorClass) { + this.objectMapperProcessorClass = objectMapperProcessorClass; + } + @Input @Optional public String getScannerClass() { @@ -289,6 +325,10 @@ public void resolve() throws GradleException { method=swaggerLoaderClass.getDeclaredMethod("setResourceClasses",String.class); method.invoke(swaggerLoader, resourceClasses.stream().map(Object::toString).collect(Collectors.joining(","))); } + if (modelConverterClasses != null && !modelConverterClasses.isEmpty()) { + method=swaggerLoaderClass.getDeclaredMethod("setModelConverterClasses",String.class); + method.invoke(swaggerLoader, modelConverterClasses.stream().map(Object::toString).collect(Collectors.joining(","))); + } if (ignoredRoutes != null && !ignoredRoutes.isEmpty()) { method=swaggerLoaderClass.getDeclaredMethod("setIgnoredRoutes",String.class); method.invoke(swaggerLoader, ignoredRoutes.stream().map(Object::toString).collect(Collectors.joining(","))); @@ -309,6 +349,11 @@ public void resolve() throws GradleException { method.invoke(swaggerLoader, scannerClass); } + if (StringUtils.isNotBlank(objectMapperProcessorClass)) { + method=swaggerLoaderClass.getDeclaredMethod("setObjectMapperProcessorClass",String.class); + method.invoke(swaggerLoader, objectMapperProcessorClass); + } + method=swaggerLoaderClass.getDeclaredMethod("setPrettyPrint", Boolean.class); method.invoke(swaggerLoader, prettyPrint); diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java index 69f4097f29..d5c7d84070 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/GenericOpenApiContext.java @@ -1,5 +1,10 @@ package io.swagger.v3.oas.integration; +import io.swagger.v3.core.converter.ModelConverter; +import io.swagger.v3.core.converter.ModelConverters; +import io.swagger.v3.core.util.Json; +import io.swagger.v3.core.util.Yaml; +import io.swagger.v3.oas.integration.api.ObjectMapperProcessor; import io.swagger.v3.oas.integration.api.OpenAPIConfiguration; import io.swagger.v3.oas.integration.api.OpenApiConfigurationLoader; import io.swagger.v3.oas.integration.api.OpenApiContext; @@ -14,6 +19,7 @@ import java.io.IOException; import java.util.Arrays; import java.util.HashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -33,6 +39,9 @@ public class GenericOpenApiContext implements O private OpenApiReader openApiReader; private OpenApiScanner openApiScanner; + private ObjectMapperProcessor objectMapperProcessor; + private Set modelConverters; + private ConcurrentHashMap cache = new ConcurrentHashMap<>(); // 0 doesn't cache @@ -152,6 +161,53 @@ public final T parent(OpenApiContext parent) { return (T) this; } + /** + * @since 2.0.6 + */ + public ObjectMapperProcessor getObjectMapperProcessor() { + return objectMapperProcessor; + } + + /** + * @since 2.0.6 + */ + @Override + public void setObjectMapperProcessor(ObjectMapperProcessor objectMapperProcessor) { + this.objectMapperProcessor = objectMapperProcessor; + } + + /** + * @since 2.0.6 + */ + public final T objectMapperProcessor(ObjectMapperProcessor objectMapperProcessor) { + this.objectMapperProcessor = objectMapperProcessor; + return (T) this; + } + + /** + * @since 2.0.6 + */ + public Set getModelConverters() { + return modelConverters; + } + + /** + * @since 2.0.6 + */ + @Override + public void setModelConverters(Set modelConverters) { + this.modelConverters = modelConverters; + } + + /** + * @since 2.0.6 + */ + public final T modelConverters(Set modelConverters) { + this.modelConverters = modelConverters; + return (T) this; + } + + protected void register() { OpenApiContextLocator.getInstance().putOpenApiContext(id, this); } @@ -203,6 +259,28 @@ protected OpenApiScanner buildScanner(final OpenAPIConfiguration openApiConfigur return scanner; } + protected ObjectMapperProcessor buildObjectMapperProcessor(final OpenAPIConfiguration openApiConfiguration) throws Exception { + ObjectMapperProcessor objectMapperProcessor = null; + if (StringUtils.isNotBlank(openApiConfiguration.getObjectMapperProcessorClass())) { + Class cls = getClass().getClassLoader().loadClass(openApiConfiguration.getObjectMapperProcessorClass()); + objectMapperProcessor = (ObjectMapperProcessor) cls.newInstance(); + } + return objectMapperProcessor; + } + + protected Set buildModelConverters(final OpenAPIConfiguration openApiConfiguration) throws Exception { + if (openApiConfiguration.getModelConverterClasses() != null && !openApiConfiguration.getModelConverterClasses().isEmpty()) { + LinkedHashSet modelConverters = new LinkedHashSet<>(); + for (String converterClass: openApiConfiguration.getModelConverterClasses()) { + Class cls = getClass().getClassLoader().loadClass(converterClass); + ModelConverter converter = (ModelConverter) cls.newInstance(); + modelConverters.add(converter); + } + return modelConverters; + } + return null; + } + protected List> getKnownLocations() { return Arrays.asList( new ImmutablePair<>("classpath", "openapi-configuration.yaml"), @@ -277,11 +355,38 @@ public T init() throws OpenApiConfigurationException { if (openApiScanner == null) { openApiScanner = buildScanner(ContextUtils.deepCopy(openApiConfiguration)); } + if (objectMapperProcessor == null) { + objectMapperProcessor = buildObjectMapperProcessor(ContextUtils.deepCopy(openApiConfiguration)); + } + if (modelConverters == null || modelConverters.isEmpty()) { + modelConverters = buildModelConverters(ContextUtils.deepCopy(openApiConfiguration)); + } } catch (Exception e) { LOGGER.error("error initializing context: " + e.getMessage(), e); throw new OpenApiConfigurationException("error initializing context: " + e.getMessage(), e); } + try { + if (objectMapperProcessor != null) { + objectMapperProcessor.processJsonObjectMapper(Json.mapper()); + objectMapperProcessor.processYamlObjectMapper(Yaml.mapper()); + } + } catch (Exception e) { + LOGGER.error("error configuring objectMapper: " + e.getMessage(), e); + throw new OpenApiConfigurationException("error configuring objectMapper: " + e.getMessage(), e); + } + + try { + if (modelConverters != null && !modelConverters.isEmpty()) { + for (ModelConverter converter: modelConverters) { + ModelConverters.getInstance().addConverter(converter); + } + } + } catch (Exception e) { + LOGGER.error("error configuring model converters: " + e.getMessage(), e); + throw new OpenApiConfigurationException("error configuring model converters: " + e.getMessage(), e); + } + // set cache TTL if present in configuration if (openApiConfiguration.getCacheTTL() != null) { this.cacheTTL = openApiConfiguration.getCacheTTL(); @@ -337,6 +442,13 @@ private OpenAPIConfiguration mergeParentConfiguration(OpenAPIConfiguration confi if (merged.isReadAllResources() == null) { merged.setReadAllResources(parentConfig.isReadAllResources()); } + if (merged.getObjectMapperProcessorClass() == null) { + merged.setObjectMapperProcessorClass(parentConfig.getObjectMapperProcessorClass()); + } + if (merged.getModelConverterClasses() == null) { + merged.setModelConverterClassess(parentConfig.getModelConverterClasses()); + } + return merged; } diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java index 0fce86c90b..66433a9ded 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/SwaggerConfiguration.java @@ -27,6 +27,9 @@ public class SwaggerConfiguration implements OpenAPIConfiguration { private Collection ignoredRoutes; private Long cacheTTL = -1L; + private Set modelConverterClasses; + private String objectMapperProcessorClass; + public Long getCacheTTL() { return cacheTTL; } @@ -185,4 +188,47 @@ public void setId(String id) { this.id = id; } + /** + * @since 2.0.6 + */ + public SwaggerConfiguration objectMapperProcessorClass(String objectMapperProcessorClass) { + this.objectMapperProcessorClass = objectMapperProcessorClass; + return this; + } + + /** + * @since 2.0.6 + */ + public String getObjectMapperProcessorClass() { + return objectMapperProcessorClass; + } + + /** + * @since 2.0.6 + */ + public void setObjectMapperProcessorClass(String objectMapperProcessorClass) { + this.objectMapperProcessorClass = objectMapperProcessorClass; + } + + /** + * @since 2.0.6 + */ + public Set getModelConverterClasses() { + return modelConverterClasses; + } + + /** + * @since 2.0.6 + */ + public void setModelConverterClassess(Set modelConverterClasses) { + this.modelConverterClasses = modelConverterClasses; + } + + /** + * @since 2.0.6 + */ + public SwaggerConfiguration modelConverterClasses(Set modelConverterClasses) { + this.modelConverterClasses = modelConverterClasses; + return this; + } } diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/ObjectMapperProcessor.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/ObjectMapperProcessor.java new file mode 100644 index 0000000000..5d14a4eac2 --- /dev/null +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/ObjectMapperProcessor.java @@ -0,0 +1,12 @@ +package io.swagger.v3.oas.integration.api; + +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * @since 2.0.6 + */ +public interface ObjectMapperProcessor { + + void processJsonObjectMapper(ObjectMapper mapper); + void processYamlObjectMapper(ObjectMapper mapper); +} diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java index cc8a16b173..844cf6369b 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenAPIConfiguration.java @@ -28,4 +28,15 @@ public interface OpenAPIConfiguration { Boolean isPrettyPrint(); Long getCacheTTL(); + + /** + * @since 2.0.6 + */ + public String getObjectMapperProcessorClass(); + + /** + * @since 2.0.6 + */ + public Set getModelConverterClasses(); + } diff --git a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenApiContext.java b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenApiContext.java index 7a993d7f35..e3c22beabc 100644 --- a/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenApiContext.java +++ b/modules/swagger-integration/src/main/java/io/swagger/v3/oas/integration/api/OpenApiContext.java @@ -1,8 +1,11 @@ package io.swagger.v3.oas.integration.api; +import io.swagger.v3.core.converter.ModelConverter; import io.swagger.v3.oas.integration.OpenApiConfigurationException; import io.swagger.v3.oas.models.OpenAPI; +import java.util.Set; + public interface OpenApiContext { String OPENAPI_CONTEXT_ID_KEY = "openapi.context.id"; @@ -25,4 +28,14 @@ public interface OpenApiContext { void setOpenApiReader(OpenApiReader openApiReader); + /** + * @since 2.0.6 + */ + void setObjectMapperProcessor(ObjectMapperProcessor objectMapperProcessor); + + /** + * @since 2.0.6 + */ + void setModelConverters(Set modelConverters); + } diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java index ac839e0ddc..8e90f868dc 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletConfigContextUtils.java @@ -5,6 +5,7 @@ import javax.servlet.ServletConfig; import java.util.Arrays; +import java.util.LinkedHashSet; import java.util.Set; import java.util.stream.Collectors; @@ -25,6 +26,16 @@ public class ServletConfigContextUtils { public static final String OPENAPI_CONFIGURATION_FILTER_KEY = "openApi.configuration.filterClass"; public static final String OPENAPI_CONFIGURATION_CACHE_TTL_KEY = "openApi.configuration.cacheTTL"; + /** + * @since 2.0.6 + */ + public static final String OPENAPI_CONFIGURATION_OBJECT_MAPPER_PROCESSOR_KEY = "openApi.configuration.objectMapperProcessorClass"; + + /** + * @since 2.0.6 + */ + public static final String OPENAPI_CONFIGURATION_MODEL_CONVERTERS_KEY = "openApi.configuration.modelConverterClasses"; + public static Set resolveResourcePackages(ServletConfig servletConfig) { if (!isServletConfigAvailable(servletConfig)) { return null; @@ -70,6 +81,24 @@ public static Set resolveResourceClasses(ServletConfig servletConfig) { } + /** + * @since 2.0.6 + */ + public static Set resolveModelConverterClasses(ServletConfig servletConfig) { + if (!isServletConfigAvailable(servletConfig)) { + return null; + } + String modelConverterClasses = getInitParam(servletConfig, OPENAPI_CONFIGURATION_MODEL_CONVERTERS_KEY); + if (modelConverterClasses != null) { + modelConverterClasses = modelConverterClasses.replace(';', ','); + } + if (StringUtils.isBlank(modelConverterClasses)) { + return null; + } + return new LinkedHashSet<>(Arrays.stream(modelConverterClasses.split(",")).collect(Collectors.toSet())); + + } + public static String getInitParam(ServletConfig sc, String paramKey) { if (!isServletConfigAvailable(sc)) { return null; diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletOpenApiConfigurationLoader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletOpenApiConfigurationLoader.java index 2daaee7015..0550e4cc8d 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletOpenApiConfigurationLoader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/ServletOpenApiConfigurationLoader.java @@ -16,6 +16,7 @@ import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_BUILDER_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_CACHE_TTL_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_FILTER_KEY; +import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_OBJECT_MAPPER_PROCESSOR_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_PRETTYPRINT_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_READALLRESOURCES_KEY; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.OPENAPI_CONFIGURATION_READER_KEY; @@ -23,6 +24,7 @@ import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.getBooleanInitParam; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.getInitParam; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.getLongInitParam; +import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.resolveModelConverterClasses; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.resolveResourceClasses; import static io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils.resolveResourcePackages; @@ -53,7 +55,9 @@ public OpenAPIConfiguration load(String path) throws IOException { .prettyPrint(getBooleanInitParam(servletConfig, OPENAPI_CONFIGURATION_PRETTYPRINT_KEY)) .readerClass(getInitParam(servletConfig, OPENAPI_CONFIGURATION_READER_KEY)) .cacheTTL(getLongInitParam(servletConfig, OPENAPI_CONFIGURATION_CACHE_TTL_KEY)) - .scannerClass(getInitParam(servletConfig, OPENAPI_CONFIGURATION_SCANNER_KEY)); + .scannerClass(getInitParam(servletConfig, OPENAPI_CONFIGURATION_SCANNER_KEY)) + .objectMapperProcessorClass(getInitParam(servletConfig, OPENAPI_CONFIGURATION_OBJECT_MAPPER_PROCESSOR_KEY)) + .modelConverterClasses(resolveModelConverterClasses(servletConfig)); return configuration; @@ -112,6 +116,12 @@ public boolean exists(String path) { if (getInitParam(servletConfig, OPENAPI_CONFIGURATION_SCANNER_KEY) != null) { return true; } + if (getInitParam(servletConfig, OPENAPI_CONFIGURATION_OBJECT_MAPPER_PROCESSOR_KEY) != null) { + return true; + } + if (resolveModelConverterClasses(servletConfig) != null) { + return true; + } return false; } String location = ServletConfigContextUtils.getInitParam(servletConfig, path); diff --git a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java index 7e18db375c..280f0fb9ed 100644 --- a/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java +++ b/modules/swagger-jaxrs2/src/main/java/io/swagger/v3/jaxrs2/integration/SwaggerLoader.java @@ -10,6 +10,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; @@ -28,6 +29,37 @@ public class SwaggerLoader { private String openapiAsString; + private String objectMapperProcessorClass; + private String modelConverterClasses; + + /** + * @since 2.0.6 + */ + public String getObjectMapperProcessorClass() { + return objectMapperProcessorClass; + } + + /** + * @since 2.0.6 + */ + public void setObjectMapperProcessorClass(String objectMapperProcessorClass) { + this.objectMapperProcessorClass = objectMapperProcessorClass; + } + + /** + * @since 2.0.6 + */ + public String getModelConverterClasses() { + return modelConverterClasses; + } + + /** + * @since 2.0.6 + */ + public void setModelConverterClasses(String modelConverterClasses) { + this.modelConverterClasses = modelConverterClasses; + } + public String getOutputFormat() { return outputFormat; } @@ -124,6 +156,11 @@ public Map resolve() throws Exception{ resourcePackagesSet = new HashSet<>(Arrays.asList(resourcePackages.split(","))); } + LinkedHashSet modelConverterSet = null; + if (StringUtils.isNotBlank(modelConverterClasses)) { + modelConverterSet = new LinkedHashSet<>(Arrays.asList(modelConverterClasses.split(","))); + } + OpenAPI openAPIInput = null; if (StringUtils.isNotBlank(openapiAsString)) { try { @@ -146,7 +183,9 @@ public Map resolve() throws Exception{ .readerClass(readerClass) .scannerClass(scannerClass) .resourceClasses(resourceClassesSet) - .resourcePackages(resourcePackagesSet); + .resourcePackages(resourcePackagesSet) + .objectMapperProcessorClass(objectMapperProcessorClass) + .modelConverterClasses(modelConverterSet); try { OpenAPI openAPI = new JaxrsOpenApiContextBuilder() .openApiConfiguration(config) diff --git a/modules/swagger-maven-plugin/README.md b/modules/swagger-maven-plugin/README.md index 08db4ae0dd..2b24d0e2ad 100644 --- a/modules/swagger-maven-plugin/README.md +++ b/modules/swagger-maven-plugin/README.md @@ -74,6 +74,8 @@ Parameter | Description | Required | Default `scannerClass`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| `readAllResources`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| `ignoredRoutes`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| +`objectMapperProcessorClass`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| +`modelConverterClasses`|see [configuration property](https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---Integration-and-Configuration#configuration-properties)|false| *** diff --git a/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java b/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java index 79dd428c19..03f100ec44 100644 --- a/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java +++ b/modules/swagger-maven-plugin/src/main/java/io/swagger/v3/plugin/maven/SwaggerMojo.java @@ -23,6 +23,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.Collection; +import java.util.LinkedHashSet; import java.util.Set; @Mojo( @@ -88,7 +89,9 @@ public void execute() throws MojoExecutionException, MojoFailureException .scannerClass(scannerClass) .resourceClasses(resourceClasses) .openAPI(openAPIInput) - .resourcePackages(resourcePackages); + .resourcePackages(resourcePackages) + .objectMapperProcessorClass(objectMapperProcessorClass) + .modelConverterClasses(modelConverterClasses); try { OpenAPI openAPI = new JaxrsOpenApiContextBuilder() .openApiConfiguration(config) @@ -152,12 +155,16 @@ public void execute() throws MojoExecutionException, MojoFailureException private Set resourcePackages; @Parameter( property = "resolve.resourceClasses" ) private Set resourceClasses; + @Parameter( property = "resolve.modelConverterClasses" ) + private LinkedHashSet modelConverterClasses; @Parameter( property = "resolve.filterClass" ) private String filterClass; @Parameter( property = "resolve.readerClass" ) private String readerClass; @Parameter( property = "resolve.scannerClass" ) private String scannerClass; + @Parameter( property = "resolve.objectMapperProcessorClass" ) + private String objectMapperProcessorClass; @Parameter( property = "resolve.prettyPrint" ) private Boolean prettyPrint = false; @Parameter( property = "resolve.readAllResources" )