You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2023/08/16 01:37:35 UTC
[servicecomb-java-chassis] 02/12: [SCB-2803]refactoring swagger generator jaxrs to support many codec implementations
This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
commit 6da89ef8f47d2c2ee5059aec213adc9e8623d92a
Author: liubao <bi...@qq.com>
AuthorDate: Thu Aug 10 21:53:40 2023 +0800
[SCB-2803]refactoring swagger generator jaxrs to support many codec implementations
---
.../swagger/generator/ParameterGenerator.java | 52 +++++++++-------
.../generator/core/AbstractOperationGenerator.java | 17 +++--
.../generator/core/AbstractSwaggerGenerator.java | 4 +-
.../generator/core/ParameterGeneratorContext.java | 47 ++++++++++++++
.../generator/core/SwaggerGeneratorContext.java | 7 ++-
.../parameter/PartArrayParameterTypeProcessor.java | 4 +-
.../parameter/PartListParameterTypeProcessor.java | 3 +-
.../parameter/PartParameterTypeProcessor.java | 4 +-
...swagger.generator.ParameterAnnotationProcessor} | 0
.../annotation/CookieParamAnnotationProcessor.java | 40 +++---------
.../annotation/FormParamAnnotationProcessor.java | 72 +++-------------------
.../annotation/HeaderParamAnnotationProcessor.java | 41 +++---------
.../annotation/JaxrsParameterProcessor.java | 4 +-
.../annotation/PathParamAnnotationProcessor.java | 41 +++---------
.../annotation/QueryParamAnnotationProcessor.java | 41 +++---------
...swagger.generator.ParameterAnnotationProcessor} | 0
.../servicecomb/swagger/generator/jaxrs/Echo.java | 6 --
.../generator/jaxrs/TestClassAnnotation.java | 8 ++-
.../swagger/generator/jaxrs/TestJaxrs.java | 20 +++++-
.../test/resources/schemas/ClassAnnotation.yaml | 63 +++++++++++++++++--
.../parameter/MultipartFileArrayProcessor.java | 4 +-
.../parameter/MultipartFileListProcessor.java | 3 +-
22 files changed, 236 insertions(+), 245 deletions(-)
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/ParameterGenerator.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/ParameterGenerator.java
index ab6385634..c030e067c 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/ParameterGenerator.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/ParameterGenerator.java
@@ -32,6 +32,7 @@ import com.fasterxml.jackson.databind.type.TypeFactory;
import io.swagger.v3.oas.models.media.Content;
import io.swagger.v3.oas.models.media.MediaType;
+import io.swagger.v3.oas.models.media.ObjectSchema;
import io.swagger.v3.oas.models.parameters.CookieParameter;
import io.swagger.v3.oas.models.parameters.HeaderParameter;
import io.swagger.v3.oas.models.parameters.Parameter;
@@ -42,19 +43,11 @@ import io.swagger.v3.oas.models.parameters.RequestBody;
public class ParameterGenerator {
private final List<Annotation> annotations;
- /**
- * when wrap parameters to body, genericType is null
- */
- private final JavaType genericType;
-
- private HttpParameterType httpParameterType;
-
private final OperationGenerator operationGenerator;
private final ParameterGeneratorContext parameterGeneratorContext;
public ParameterGenerator(OperationGenerator operationGenerator, String parameterName) {
- this.genericType = null;
this.operationGenerator = operationGenerator;
this.parameterGeneratorContext = new ParameterGeneratorContext(operationGenerator.getOperationGeneratorContext());
this.parameterGeneratorContext.setParameterName(parameterName);
@@ -73,9 +66,10 @@ public class ParameterGenerator {
parameterName);
this.parameterGeneratorContext = new ParameterGeneratorContext(operationGenerator.getOperationGeneratorContext());
this.parameterGeneratorContext.setParameterName(parameterName);
- this.genericType = TypeFactory.defaultInstance()
- .constructType(SwaggerGeneratorUtils.collectGenericType(annotations, genericType));
- this.httpParameterType = SwaggerGeneratorUtils.collectHttpParameterType(annotations, genericType);
+ this.parameterGeneratorContext.setParameterType(TypeFactory.defaultInstance()
+ .constructType(SwaggerGeneratorUtils.collectGenericType(annotations, genericType)));
+ this.parameterGeneratorContext.setHttpParameterType(
+ SwaggerGeneratorUtils.collectHttpParameterType(annotations, genericType));
}
public ParameterGenerator(OperationGenerator operationGenerator, Executable executable,
@@ -93,9 +87,11 @@ public class ParameterGenerator {
this.parameterGeneratorContext = new ParameterGeneratorContext(operationGenerator.getOperationGeneratorContext());
this.parameterGeneratorContext.setParameterName(parameterName);
this.annotations = annotations;
- this.genericType = TypeFactory.defaultInstance()
- .constructType(SwaggerGeneratorUtils.collectGenericType(annotations, null));
- this.httpParameterType = SwaggerGeneratorUtils.collectHttpParameterType(annotations, genericType);
+ this.parameterGeneratorContext.setParameterType(TypeFactory.defaultInstance()
+ .constructType(SwaggerGeneratorUtils.collectGenericType(annotations, null)));
+ this.parameterGeneratorContext.setHttpParameterType(
+ SwaggerGeneratorUtils.collectHttpParameterType(annotations,
+ this.parameterGeneratorContext.getParameterType()));
}
public ParameterGeneratorContext getParameterGeneratorContext() {
@@ -107,19 +103,25 @@ public class ParameterGenerator {
}
public JavaType getGenericType() {
- return genericType;
+ return this.parameterGeneratorContext.getParameterType();
}
public HttpParameterType getHttpParameterType() {
- return httpParameterType;
+ return this.parameterGeneratorContext.getHttpParameterType();
}
public void setHttpParameterType(HttpParameterType httpParameterType) {
- this.httpParameterType = httpParameterType;
+ this.parameterGeneratorContext.setHttpParameterType(httpParameterType);
}
public void generate() {
- if (httpParameterType == HttpParameterType.BODY) {
+ this.parameterGeneratorContext.updateConsumes();
+
+ if (this.parameterGeneratorContext.getHttpParameterType() == HttpParameterType.BODY) {
+ if (parameterGeneratorContext.getSupportedConsumes().size() == 0) {
+ throw new IllegalArgumentException("Consumes not provided for BODY parameter, or is empty "
+ + "by annotations rule.");
+ }
RequestBody requestBody = new RequestBody();
Map<String, Object> extensions = new HashMap<>();
extensions.put(SwaggerConst.EXT_BODY_NAME, parameterGeneratorContext.getParameterName());
@@ -133,7 +135,11 @@ public class ParameterGenerator {
this.operationGenerator.getOperation().setRequestBody(requestBody);
return;
}
- if (httpParameterType == HttpParameterType.FORM) {
+ if (this.parameterGeneratorContext.getHttpParameterType() == HttpParameterType.FORM) {
+ if (parameterGeneratorContext.getSupportedConsumes().size() == 0) {
+ throw new IllegalArgumentException("Consumes not provided for FORM parameter, or is empty "
+ + "by annotations rule.");
+ }
RequestBody requestBody = this.operationGenerator.getOperation().getRequestBody();
if (requestBody == null) {
requestBody = new RequestBody();
@@ -144,6 +150,7 @@ public class ParameterGenerator {
MediaType mediaType = requestBody.getContent().get(media);
if (mediaType == null) {
mediaType = new MediaType();
+ mediaType.setSchema(new ObjectSchema());
requestBody.getContent().addMediaType(media, mediaType);
}
mediaType.getSchema().addProperty(parameterGeneratorContext.getParameterName(),
@@ -152,17 +159,18 @@ public class ParameterGenerator {
return;
}
Parameter parameter;
- switch (httpParameterType) {
+ switch (this.parameterGeneratorContext.getHttpParameterType()) {
case PATH -> parameter = new PathParameter();
case QUERY -> parameter = new QueryParameter();
case HEADER -> parameter = new HeaderParameter();
case COOKIE -> parameter = new CookieParameter();
- default -> throw new IllegalStateException("not support httpParameterType " + httpParameterType);
+ default -> throw new IllegalStateException("not support httpParameterType "
+ + this.parameterGeneratorContext.getHttpParameterType());
}
+ parameter.setName(parameterGeneratorContext.getParameterName());
parameter.setSchema(parameterGeneratorContext.getSchema());
parameter.setRequired(parameterGeneratorContext.getRequired());
parameter.setExplode(parameterGeneratorContext.getExplode());
- parameter.setIn(httpParameterType.name());
this.operationGenerator.getOperation().addParametersItem(parameter);
// validations and other annotations supported by swagger default
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractOperationGenerator.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractOperationGenerator.java
index a932c8258..97c09936e 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractOperationGenerator.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractOperationGenerator.java
@@ -181,14 +181,21 @@ public abstract class AbstractOperationGenerator implements OperationGenerator {
initParameterGenerators();
Set<String> names = new HashSet<>();
+ int bodyCount = 0;
for (ParameterGenerator parameterGenerator : parameterGenerators) {
scanMethodParameter(parameterGenerator);
if (!names.add(parameterGenerator.getParameterGeneratorContext().getParameterName())) {
- throw new IllegalStateException(
+ throw new IllegalArgumentException(
String.format("not support duplicated parameter, name=%s.",
parameterGenerator.getParameterGeneratorContext().getParameterName()));
}
+ if (parameterGenerator.getHttpParameterType() == HttpParameterType.BODY) {
+ if (bodyCount > 0) {
+ throw new IllegalArgumentException(String.format("Defined %d body parameter.", bodyCount));
+ }
+ bodyCount++;
+ }
parameterGenerator.generate();
}
}
@@ -203,14 +210,6 @@ public abstract class AbstractOperationGenerator implements OperationGenerator {
// 3.create ParameterGenerators remains method annotations
initRemainMethodAnnotationsParameterGenerators(methodAnnotationMap);
-
- // 4.check
- // httpParameterType should not be null
- long bodyCount = parameterGenerators.stream().filter(p -> p.getHttpParameterType().equals(HttpParameterType.BODY))
- .count();
- if (bodyCount > 1) {
- throw new IllegalStateException(String.format("defined %d body parameter.", bodyCount));
- }
}
protected void initMethodParameterGenerators(Map<String, List<Annotation>> methodAnnotationMap) {
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractSwaggerGenerator.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractSwaggerGenerator.java
index a74a9feda..fe219b34a 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractSwaggerGenerator.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/AbstractSwaggerGenerator.java
@@ -235,8 +235,8 @@ public abstract class AbstractSwaggerGenerator implements SwaggerGenerator {
try {
operationGenerator.generate();
} catch (Throwable e) {
- String msg = String
- .format("generate swagger operation failed, method=%s:%s.", this.cls.getName(), method.getName());
+ String msg = String.format("generate swagger operation failed, method=%s:%s.",
+ this.cls.getName(), method.getName());
throw new IllegalStateException(msg, e);
}
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/ParameterGeneratorContext.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/ParameterGeneratorContext.java
index 09364a0f7..adf9f849b 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/ParameterGeneratorContext.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/ParameterGeneratorContext.java
@@ -16,6 +16,11 @@
*/
package org.apache.servicecomb.swagger.generator.core;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
+
import com.fasterxml.jackson.databind.JavaType;
import io.swagger.v3.oas.models.media.Schema;
@@ -25,10 +30,14 @@ public class ParameterGeneratorContext extends OperationGeneratorContext {
private String parameterName;
+ private HttpParameterType httpParameterType;
+
private Boolean explode;
private Boolean required;
+ private Object defaultValue;
+
private Boolean rawJson;
private Schema<?> schema;
@@ -84,4 +93,42 @@ public class ParameterGeneratorContext extends OperationGeneratorContext {
public void setSchema(Schema<?> schema) {
this.schema = schema;
}
+
+ public HttpParameterType getHttpParameterType() {
+ return httpParameterType;
+ }
+
+ public void setHttpParameterType(HttpParameterType httpParameterType) {
+ this.httpParameterType = httpParameterType;
+ }
+
+ public Object getDefaultValue() {
+ return defaultValue;
+ }
+
+ public void setDefaultValue(Object defaultValue) {
+ this.defaultValue = defaultValue;
+ }
+
+ public void updateConsumes() {
+ List<String> removed = new ArrayList<>();
+ if (httpParameterType == HttpParameterType.BODY) {
+ for (String media : supportedConsumes) {
+ if (SUPPORTED_BODY_CONTENT_TYPE.contains(media)) {
+ continue;
+ }
+ removed.add(media);
+ }
+ } else if (httpParameterType == HttpParameterType.FORM) {
+ for (String media : supportedConsumes) {
+ if (SUPPORTED_FORM_CONTENT_TYPE.contains(media)) {
+ continue;
+ }
+ removed.add(media);
+ }
+ } else {
+ supportedConsumes.clear();
+ }
+ supportedConsumes.removeAll(removed);
+ }
}
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/SwaggerGeneratorContext.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/SwaggerGeneratorContext.java
index 10806dab8..837499dad 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/SwaggerGeneratorContext.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/SwaggerGeneratorContext.java
@@ -28,11 +28,16 @@ import jakarta.ws.rs.core.MediaType;
* Context information to help generate specific open api parts.
*/
public class SwaggerGeneratorContext {
- // TODO: may initialized by different codec implementations
protected static final List<String> SUPPORTED_CONTENT_TYPE
= Arrays.asList(MediaType.APPLICATION_JSON, SwaggerConst.PROTOBUF_TYPE, MediaType.TEXT_PLAIN,
MediaType.MULTIPART_FORM_DATA, MediaType.APPLICATION_FORM_URLENCODED);
+ protected static final List<String> SUPPORTED_BODY_CONTENT_TYPE
+ = Arrays.asList(MediaType.APPLICATION_JSON, SwaggerConst.PROTOBUF_TYPE, MediaType.TEXT_PLAIN);
+
+ protected static final List<String> SUPPORTED_FORM_CONTENT_TYPE
+ = Arrays.asList(MediaType.MULTIPART_FORM_DATA, MediaType.APPLICATION_FORM_URLENCODED);
+
protected List<String> supportedConsumes;
protected List<String> supportedProduces;
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartArrayParameterTypeProcessor.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartArrayParameterTypeProcessor.java
index cedbfe038..1d992ab9e 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartArrayParameterTypeProcessor.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartArrayParameterTypeProcessor.java
@@ -20,6 +20,8 @@ import java.lang.reflect.Type;
import org.apache.servicecomb.swagger.generator.ParameterGenerator;
+import com.fasterxml.jackson.databind.type.TypeFactory;
+
import io.swagger.v3.oas.models.media.ArraySchema;
import io.swagger.v3.oas.models.media.FileSchema;
import jakarta.servlet.http.Part;
@@ -27,7 +29,7 @@ import jakarta.servlet.http.Part;
public class PartArrayParameterTypeProcessor extends PartParameterTypeProcessor {
@Override
public Type getProcessType() {
- return Part[].class;
+ return TypeFactory.defaultInstance().constructType(Part[].class);
}
@Override
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartListParameterTypeProcessor.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartListParameterTypeProcessor.java
index cb4eeb39a..bfd79c512 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartListParameterTypeProcessor.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartListParameterTypeProcessor.java
@@ -19,6 +19,7 @@ package org.apache.servicecomb.swagger.generator.core.processor.parameter;
import java.lang.reflect.Type;
import java.util.List;
+import com.fasterxml.jackson.databind.type.TypeFactory;
import com.google.inject.util.Types;
import jakarta.servlet.http.Part;
@@ -26,6 +27,6 @@ import jakarta.servlet.http.Part;
public class PartListParameterTypeProcessor extends PartArrayParameterTypeProcessor {
@Override
public Type getProcessType() {
- return Types.newParameterizedType(List.class, Part.class);
+ return TypeFactory.defaultInstance().constructType(Types.newParameterizedType(List.class, Part.class));
}
}
diff --git a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartParameterTypeProcessor.java b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartParameterTypeProcessor.java
index 9605db3f0..304d34fe0 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartParameterTypeProcessor.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartParameterTypeProcessor.java
@@ -27,6 +27,8 @@ import org.apache.servicecomb.swagger.generator.ParameterTypeProcessor;
import org.apache.servicecomb.swagger.generator.SwaggerGenerator;
import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
+import com.fasterxml.jackson.databind.type.TypeFactory;
+
import io.swagger.v3.oas.models.Operation;
import io.swagger.v3.oas.models.media.Content;
import io.swagger.v3.oas.models.media.FileSchema;
@@ -38,7 +40,7 @@ import jakarta.ws.rs.core.MediaType;
public class PartParameterTypeProcessor implements ParameterTypeProcessor {
@Override
public Type getProcessType() {
- return Part.class;
+ return TypeFactory.defaultInstance().constructType(Part.class);
}
@Override
diff --git a/swagger/swagger-generator/generator-core/src/main/resources/META-INF/services/org.apache.servicecomb.swagger.generator.SwaggerParameterAnnotationProcessor b/swagger/swagger-generator/generator-core/src/main/resources/META-INF/services/org.apache.servicecomb.swagger.generator.ParameterAnnotationProcessor
similarity index 100%
rename from swagger/swagger-generator/generator-core/src/main/resources/META-INF/services/org.apache.servicecomb.swagger.generator.SwaggerParameterAnnotationProcessor
rename to swagger/swagger-generator/generator-core/src/main/resources/META-INF/services/org.apache.servicecomb.swagger.generator.ParameterAnnotationProcessor
diff --git a/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/CookieParamAnnotationProcessor.java b/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/CookieParamAnnotationProcessor.java
index 1afa3efee..51467e936 100644
--- a/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/CookieParamAnnotationProcessor.java
+++ b/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/CookieParamAnnotationProcessor.java
@@ -19,16 +19,12 @@ package org.apache.servicecomb.swagger.generator.jaxrs.processor.annotation;
import java.lang.reflect.Type;
-import org.apache.servicecomb.swagger.SwaggerUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.servicecomb.swagger.generator.OperationGenerator;
+import org.apache.servicecomb.swagger.generator.ParameterGenerator;
+import org.apache.servicecomb.swagger.generator.SwaggerGenerator;
import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
-import com.fasterxml.jackson.databind.JavaType;
-
-import io.swagger.v3.oas.models.OpenAPI;
-import io.swagger.v3.oas.models.Operation;
-import io.swagger.v3.oas.models.media.Schema;
-import io.swagger.v3.oas.models.parameters.Parameter;
-import io.swagger.v3.oas.models.parameters.RequestBody;
import jakarta.ws.rs.CookieParam;
public class CookieParamAnnotationProcessor extends
@@ -39,29 +35,11 @@ public class CookieParamAnnotationProcessor extends
}
@Override
- public String getParameterName(CookieParam parameterAnnotation) {
- return parameterAnnotation.value();
- }
-
- @Override
- public HttpParameterType getHttpParameterType(CookieParam parameterAnnotation) {
- return HttpParameterType.COOKIE;
- }
-
- @Override
- public void fillParameter(OpenAPI swagger, Operation operation, Parameter cookieParameter, JavaType type,
- CookieParam cookieParam) {
- Schema schema = cookieParameter.getSchema();
- if (schema == null) {
- schema = SwaggerUtils.resolveTypeSchemas(swagger, type);
- cookieParameter.setSchema(schema);
+ public void process(SwaggerGenerator swaggerGenerator, OperationGenerator operationGenerator,
+ ParameterGenerator parameterGenerator, CookieParam annotation) {
+ parameterGenerator.setHttpParameterType(HttpParameterType.COOKIE);
+ if (StringUtils.isNotEmpty(annotation.value())) {
+ parameterGenerator.getParameterGeneratorContext().setParameterName(annotation.value());
}
- cookieParameter.setName(cookieParam.value());
- }
-
- @Override
- public void fillRequestBody(OpenAPI swagger, Operation operation, RequestBody parameter, String parameterName,
- JavaType type, CookieParam cookieParam) {
-
}
}
diff --git a/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/FormParamAnnotationProcessor.java b/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/FormParamAnnotationProcessor.java
index 1edd9c215..106f90ac4 100644
--- a/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/FormParamAnnotationProcessor.java
+++ b/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/FormParamAnnotationProcessor.java
@@ -18,25 +18,15 @@
package org.apache.servicecomb.swagger.generator.jaxrs.processor.annotation;
import java.lang.reflect.Type;
-import java.util.LinkedHashMap;
-import org.apache.servicecomb.swagger.SwaggerUtils;
-import org.apache.servicecomb.swagger.generator.SwaggerConst;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.servicecomb.swagger.generator.OperationGenerator;
+import org.apache.servicecomb.swagger.generator.ParameterGenerator;
+import org.apache.servicecomb.swagger.generator.SwaggerGenerator;
import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
-import com.fasterxml.jackson.databind.JavaType;
-
-import io.swagger.v3.oas.models.OpenAPI;
-import io.swagger.v3.oas.models.Operation;
-import io.swagger.v3.oas.models.media.Content;
-import io.swagger.v3.oas.models.media.MapSchema;
-import io.swagger.v3.oas.models.media.Schema;
-import io.swagger.v3.oas.models.parameters.Parameter;
-import io.swagger.v3.oas.models.parameters.RequestBody;
-import jakarta.servlet.http.Part;
import jakarta.ws.rs.FormParam;
-@SuppressWarnings({"rawtypes", "unchecked"})
public class FormParamAnnotationProcessor extends JaxrsParameterProcessor<FormParam> {
@Override
public Type getProcessType() {
@@ -44,55 +34,11 @@ public class FormParamAnnotationProcessor extends JaxrsParameterProcessor<FormPa
}
@Override
- public String getParameterName(FormParam parameterAnnotation) {
- return parameterAnnotation.value();
- }
-
- @Override
- public HttpParameterType getHttpParameterType(FormParam parameterAnnotation) {
- return HttpParameterType.FORM;
- }
-
- @Override
- public void fillParameter(OpenAPI swagger, Operation operation, Parameter parameter, JavaType type,
- FormParam formParam) {
-
- }
-
- @Override
- public void fillRequestBody(OpenAPI swagger, Operation operation, RequestBody requestBody, String parameterName,
- JavaType type, FormParam formParam) {
- if (requestBody.getContent() == null) {
- requestBody.setContent(new Content());
+ public void process(SwaggerGenerator swaggerGenerator, OperationGenerator operationGenerator,
+ ParameterGenerator parameterGenerator, FormParam annotation) {
+ parameterGenerator.setHttpParameterType(HttpParameterType.FORM);
+ if (StringUtils.isNotEmpty(annotation.value())) {
+ parameterGenerator.getParameterGeneratorContext().setParameterName(annotation.value());
}
-
- String mediaType = SwaggerConst.FORM_MEDIA_TYPE;
- if (requestBody.getContent().get(SwaggerConst.FILE_MEDIA_TYPE) != null || isPart(type)) {
- mediaType = SwaggerConst.FILE_MEDIA_TYPE;
- }
-
- if (requestBody.getContent().get(mediaType) == null) {
- requestBody.getContent().addMediaType(mediaType,
- new io.swagger.v3.oas.models.media.MediaType());
- }
- if (requestBody.getContent().get(mediaType).getSchema() == null) {
- requestBody.getContent().get(mediaType)
- .setSchema(new MapSchema());
- }
- if (requestBody.getContent().get(mediaType).getSchema().getProperties() == null) {
- requestBody.getContent().get(mediaType)
- .getSchema().setProperties(new LinkedHashMap<>());
- }
-
- // FormParam used with Part and simple types.
- // Part is processed by type processor.
- if (!isPart(type)) {
- Schema schema = SwaggerUtils.resolveTypeSchemas(swagger, type);
- requestBody.getContent().get(mediaType).getSchema().getProperties().put(parameterName, schema);
- }
- }
-
- private boolean isPart(JavaType type) {
- return Part.class.equals(type.getRawClass());
}
}
diff --git a/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/HeaderParamAnnotationProcessor.java b/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/HeaderParamAnnotationProcessor.java
index 2d917317e..770fc1fbe 100644
--- a/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/HeaderParamAnnotationProcessor.java
+++ b/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/HeaderParamAnnotationProcessor.java
@@ -19,19 +19,14 @@ package org.apache.servicecomb.swagger.generator.jaxrs.processor.annotation;
import java.lang.reflect.Type;
-import org.apache.servicecomb.swagger.SwaggerUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.servicecomb.swagger.generator.OperationGenerator;
+import org.apache.servicecomb.swagger.generator.ParameterGenerator;
+import org.apache.servicecomb.swagger.generator.SwaggerGenerator;
import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
-import com.fasterxml.jackson.databind.JavaType;
-
-import io.swagger.v3.oas.models.OpenAPI;
-import io.swagger.v3.oas.models.Operation;
-import io.swagger.v3.oas.models.media.Schema;
-import io.swagger.v3.oas.models.parameters.Parameter;
-import io.swagger.v3.oas.models.parameters.RequestBody;
import jakarta.ws.rs.HeaderParam;
-@SuppressWarnings("rawtypes")
public class HeaderParamAnnotationProcessor extends
JaxrsParameterProcessor<HeaderParam> {
@Override
@@ -40,29 +35,11 @@ public class HeaderParamAnnotationProcessor extends
}
@Override
- public String getParameterName(HeaderParam annotation) {
- return annotation.value();
- }
-
- @Override
- public HttpParameterType getHttpParameterType(HeaderParam parameterAnnotation) {
- return HttpParameterType.HEADER;
- }
-
- @Override
- public void fillParameter(OpenAPI swagger, Operation operation, Parameter headerParameter, JavaType type,
- HeaderParam headerParam) {
- Schema schema = headerParameter.getSchema();
- if (schema == null) {
- schema = SwaggerUtils.resolveTypeSchemas(swagger, type);
- headerParameter.setSchema(schema);
+ public void process(SwaggerGenerator swaggerGenerator, OperationGenerator operationGenerator,
+ ParameterGenerator parameterGenerator, HeaderParam annotation) {
+ parameterGenerator.setHttpParameterType(HttpParameterType.HEADER);
+ if (StringUtils.isNotEmpty(annotation.value())) {
+ parameterGenerator.getParameterGeneratorContext().setParameterName(annotation.value());
}
- headerParameter.setName(headerParam.value());
- }
-
- @Override
- public void fillRequestBody(OpenAPI swagger, Operation operation, RequestBody parameter,
- String parameterName, JavaType type, HeaderParam headerParam) {
-
}
}
diff --git a/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/JaxrsParameterProcessor.java b/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/JaxrsParameterProcessor.java
index db5f22ade..ccb271cb9 100644
--- a/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/JaxrsParameterProcessor.java
+++ b/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/JaxrsParameterProcessor.java
@@ -17,8 +17,8 @@
package org.apache.servicecomb.swagger.generator.jaxrs.processor.annotation;
-import org.apache.servicecomb.swagger.generator.ParameterProcessor;
+import org.apache.servicecomb.swagger.generator.ParameterAnnotationProcessor;
public abstract class JaxrsParameterProcessor<ANNOTATION> implements
- ParameterProcessor<ANNOTATION> {
+ ParameterAnnotationProcessor<ANNOTATION> {
}
diff --git a/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/PathParamAnnotationProcessor.java b/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/PathParamAnnotationProcessor.java
index b856a1bfd..3c112e980 100644
--- a/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/PathParamAnnotationProcessor.java
+++ b/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/PathParamAnnotationProcessor.java
@@ -19,19 +19,14 @@ package org.apache.servicecomb.swagger.generator.jaxrs.processor.annotation;
import java.lang.reflect.Type;
-import org.apache.servicecomb.swagger.SwaggerUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.servicecomb.swagger.generator.OperationGenerator;
+import org.apache.servicecomb.swagger.generator.ParameterGenerator;
+import org.apache.servicecomb.swagger.generator.SwaggerGenerator;
import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
-import com.fasterxml.jackson.databind.JavaType;
-
-import io.swagger.v3.oas.models.OpenAPI;
-import io.swagger.v3.oas.models.Operation;
-import io.swagger.v3.oas.models.media.Schema;
-import io.swagger.v3.oas.models.parameters.Parameter;
-import io.swagger.v3.oas.models.parameters.RequestBody;
import jakarta.ws.rs.PathParam;
-@SuppressWarnings("rawtypes")
public class PathParamAnnotationProcessor extends JaxrsParameterProcessor<PathParam> {
@Override
public Type getProcessType() {
@@ -39,29 +34,11 @@ public class PathParamAnnotationProcessor extends JaxrsParameterProcessor<PathPa
}
@Override
- public String getParameterName(PathParam parameterAnnotation) {
- return parameterAnnotation.value();
- }
-
- @Override
- public HttpParameterType getHttpParameterType(PathParam parameterAnnotation) {
- return HttpParameterType.PATH;
- }
-
- @Override
- public void fillParameter(OpenAPI swagger, Operation operation, Parameter pathParameter, JavaType type,
- PathParam pathParam) {
- Schema schema = pathParameter.getSchema();
- if (schema == null) {
- schema = SwaggerUtils.resolveTypeSchemas(swagger, type);
- pathParameter.setSchema(schema);
+ public void process(SwaggerGenerator swaggerGenerator, OperationGenerator operationGenerator,
+ ParameterGenerator parameterGenerator, PathParam annotation) {
+ parameterGenerator.setHttpParameterType(HttpParameterType.PATH);
+ if (StringUtils.isNotEmpty(annotation.value())) {
+ parameterGenerator.getParameterGeneratorContext().setParameterName(annotation.value());
}
- pathParameter.setName(pathParam.value());
- }
-
- @Override
- public void fillRequestBody(OpenAPI swagger, Operation operation, RequestBody parameter, String parameterName,
- JavaType type, PathParam pathParam) {
-
}
}
diff --git a/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/QueryParamAnnotationProcessor.java b/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/QueryParamAnnotationProcessor.java
index 23cd33ffc..be9517d63 100644
--- a/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/QueryParamAnnotationProcessor.java
+++ b/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/processor/annotation/QueryParamAnnotationProcessor.java
@@ -19,19 +19,14 @@ package org.apache.servicecomb.swagger.generator.jaxrs.processor.annotation;
import java.lang.reflect.Type;
-import org.apache.servicecomb.swagger.SwaggerUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.servicecomb.swagger.generator.OperationGenerator;
+import org.apache.servicecomb.swagger.generator.ParameterGenerator;
+import org.apache.servicecomb.swagger.generator.SwaggerGenerator;
import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
-import com.fasterxml.jackson.databind.JavaType;
-
-import io.swagger.v3.oas.models.OpenAPI;
-import io.swagger.v3.oas.models.Operation;
-import io.swagger.v3.oas.models.media.Schema;
-import io.swagger.v3.oas.models.parameters.Parameter;
-import io.swagger.v3.oas.models.parameters.RequestBody;
import jakarta.ws.rs.QueryParam;
-@SuppressWarnings("rawtypes")
public class QueryParamAnnotationProcessor extends JaxrsParameterProcessor<QueryParam> {
@Override
public Type getProcessType() {
@@ -39,29 +34,11 @@ public class QueryParamAnnotationProcessor extends JaxrsParameterProcessor<Query
}
@Override
- public String getParameterName(QueryParam parameterAnnotation) {
- return parameterAnnotation.value();
- }
-
- @Override
- public HttpParameterType getHttpParameterType(QueryParam parameterAnnotation) {
- return HttpParameterType.QUERY;
- }
-
- @Override
- public void fillParameter(OpenAPI swagger, Operation operation, Parameter queryParameter, JavaType type,
- QueryParam queryParam) {
- Schema schema = queryParameter.getSchema();
- if (schema == null) {
- schema = SwaggerUtils.resolveTypeSchemas(swagger, type);
- queryParameter.setSchema(schema);
+ public void process(SwaggerGenerator swaggerGenerator, OperationGenerator operationGenerator,
+ ParameterGenerator parameterGenerator, QueryParam annotation) {
+ parameterGenerator.setHttpParameterType(HttpParameterType.QUERY);
+ if (StringUtils.isNotEmpty(annotation.value())) {
+ parameterGenerator.getParameterGeneratorContext().setParameterName(annotation.value());
}
- queryParameter.setName(queryParam.value());
- }
-
- @Override
- public void fillRequestBody(OpenAPI swagger, Operation operation, RequestBody requestBody, String parameterName,
- JavaType type, QueryParam queryParam) {
-
}
}
diff --git a/swagger/swagger-generator/generator-jaxrs/src/main/resources/META-INF/services/org.apache.servicecomb.swagger.generator.ParameterProcessor b/swagger/swagger-generator/generator-jaxrs/src/main/resources/META-INF/services/org.apache.servicecomb.swagger.generator.ParameterAnnotationProcessor
similarity index 100%
rename from swagger/swagger-generator/generator-jaxrs/src/main/resources/META-INF/services/org.apache.servicecomb.swagger.generator.ParameterProcessor
rename to swagger/swagger-generator/generator-jaxrs/src/main/resources/META-INF/services/org.apache.servicecomb.swagger.generator.ParameterAnnotationProcessor
diff --git a/swagger/swagger-generator/generator-jaxrs/src/test/java/org/apache/servicecomb/swagger/generator/jaxrs/Echo.java b/swagger/swagger-generator/generator-jaxrs/src/test/java/org/apache/servicecomb/swagger/generator/jaxrs/Echo.java
index 527b477e7..67a8ac39c 100644
--- a/swagger/swagger-generator/generator-jaxrs/src/test/java/org/apache/servicecomb/swagger/generator/jaxrs/Echo.java
+++ b/swagger/swagger-generator/generator-jaxrs/src/test/java/org/apache/servicecomb/swagger/generator/jaxrs/Echo.java
@@ -41,7 +41,6 @@ import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import jakarta.ws.rs.BeanParam;
-import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.CookieParam;
import jakarta.ws.rs.FormParam;
import jakarta.ws.rs.GET;
@@ -50,7 +49,6 @@ import jakarta.ws.rs.PATCH;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.PathParam;
-import jakarta.ws.rs.Produces;
import jakarta.ws.rs.QueryParam;
import jakarta.ws.rs.core.Response;
@@ -70,8 +68,6 @@ public class Echo {
}
@POST
- @Produces("")
- @Consumes("")
@Operation(summary = "")
@Path("emptyPath")
public void emptyPath() {
@@ -79,8 +75,6 @@ public class Echo {
}
@Path(value = "echo/{targetName}")
- @Consumes(value = {"json", "xml"})
- @Produces(value = {"json", "xml"})
@POST
public String echo(User srcUser, @HeaderParam(value = "header") String header,
@PathParam(value = "targetName") String targetName,
diff --git a/swagger/swagger-generator/generator-jaxrs/src/test/java/org/apache/servicecomb/swagger/generator/jaxrs/TestClassAnnotation.java b/swagger/swagger-generator/generator-jaxrs/src/test/java/org/apache/servicecomb/swagger/generator/jaxrs/TestClassAnnotation.java
index f910cc241..7dfb379f2 100644
--- a/swagger/swagger-generator/generator-jaxrs/src/test/java/org/apache/servicecomb/swagger/generator/jaxrs/TestClassAnnotation.java
+++ b/swagger/swagger-generator/generator-jaxrs/src/test/java/org/apache/servicecomb/swagger/generator/jaxrs/TestClassAnnotation.java
@@ -28,13 +28,17 @@ public class TestClassAnnotation {
@Test
public void test_form_wrong() {
- UnitTestSwaggerUtils.testException("wrong", ClassAnnotation.class,
+ UnitTestSwaggerUtils.testException("generate swagger operation failed, "
+ + "method=org.apache.servicecomb.swagger.generator.jaxrs.ClassAnnotation:testFormWrong.",
+ ClassAnnotation.class,
"testFormWrong");
}
@Test
public void test_upload_wrong() {
- UnitTestSwaggerUtils.testException("wrong", ClassAnnotation.class,
+ UnitTestSwaggerUtils.testException("generate swagger operation failed, "
+ + "method=org.apache.servicecomb.swagger.generator.jaxrs.ClassAnnotation:testUploadWrong.",
+ ClassAnnotation.class,
"testUploadWrong");
}
}
diff --git a/swagger/swagger-generator/generator-jaxrs/src/test/java/org/apache/servicecomb/swagger/generator/jaxrs/TestJaxrs.java b/swagger/swagger-generator/generator-jaxrs/src/test/java/org/apache/servicecomb/swagger/generator/jaxrs/TestJaxrs.java
index 4f2d1089d..0888b3389 100644
--- a/swagger/swagger-generator/generator-jaxrs/src/test/java/org/apache/servicecomb/swagger/generator/jaxrs/TestJaxrs.java
+++ b/swagger/swagger-generator/generator-jaxrs/src/test/java/org/apache/servicecomb/swagger/generator/jaxrs/TestJaxrs.java
@@ -49,7 +49,23 @@ public class TestJaxrs {
}
@Test
- public void consumesAndProduces() {
- UnitTestSwaggerUtils.testSwagger("schemas/consumes.yaml", ConsumesAndProduces.class);
+ public void consumesAndProduces_exception_testSingleMediaType() {
+ UnitTestSwaggerUtils.testException("generate swagger operation failed, "
+ + "method=org.apache.servicecomb.swagger.generator.jaxrs.model.ConsumesAndProduces:testSingleMediaType.",
+ ConsumesAndProduces.class, "testSingleMediaType");
+ }
+
+ @Test
+ public void consumesAndProduces_exception_testMultipleMediaType() {
+ UnitTestSwaggerUtils.testException("generate swagger operation failed, "
+ + "method=org.apache.servicecomb.swagger.generator.jaxrs.model.ConsumesAndProduces:testMultipleMediaType.",
+ ConsumesAndProduces.class, "testMultipleMediaType");
+ }
+
+ @Test
+ public void consumesAndProduces_exception_testBlankMediaType() {
+ UnitTestSwaggerUtils.testException("generate swagger operation failed, "
+ + "method=org.apache.servicecomb.swagger.generator.jaxrs.model.ConsumesAndProduces:testBlankMediaType.",
+ ConsumesAndProduces.class, "testBlankMediaType");
}
}
diff --git a/swagger/swagger-generator/generator-jaxrs/src/test/resources/schemas/ClassAnnotation.yaml b/swagger/swagger-generator/generator-jaxrs/src/test/resources/schemas/ClassAnnotation.yaml
index 35b60c51b..a1c4739d5 100644
--- a/swagger/swagger-generator/generator-jaxrs/src/test/resources/schemas/ClassAnnotation.yaml
+++ b/swagger/swagger-generator/generator-jaxrs/src/test/resources/schemas/ClassAnnotation.yaml
@@ -15,22 +15,77 @@
## limitations under the License.
## ---------------------------------------------------------------------------
+---
openapi: 3.0.1
info:
title: swagger definition for org.apache.servicecomb.swagger.generator.jaxrs.ClassAnnotation
version: 1.0.0
servers:
- - url: /class
+- url: /class
paths:
- /cookie:
+ /testBean:
post:
- operationId: cookie
+ operationId: testBean
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/User'
x-name: user
+ responses:
+ "200":
+ description: response of 200
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/User'
+ /testForm:
+ post:
+ operationId: testForm
+ requestBody:
+ content:
+ application/x-www-form-urlencoded:
+ schema:
+ type: object
+ properties:
+ param:
+ type: integer
+ format: int32
+ responses:
+ "200":
+ description: response of 200
+ content:
+ application/json:
+ schema:
+ type: string
+ /testString:
+ post:
+ operationId: testString
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: string
+ x-name: user
+ responses:
+ "200":
+ description: response of 200
+ content:
+ application/json:
+ schema:
+ type: string
+ /testUpload:
+ post:
+ operationId: testUpload
+ requestBody:
+ content:
+ multipart/form-data:
+ schema:
+ type: object
+ properties:
+ part:
+ type: string
+ format: binary
responses:
"200":
description: response of 200
@@ -49,4 +104,4 @@ components:
type: array
items:
$ref: '#/components/schemas/User'
- x-java-class: org.apache.servicecomb.foundation.test.scaffolding.model.User
+ x-java-class: org.apache.servicecomb.foundation.test.scaffolding.model.User
\ No newline at end of file
diff --git a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/parameter/MultipartFileArrayProcessor.java b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/parameter/MultipartFileArrayProcessor.java
index 2849c1cf2..b32c1b49c 100644
--- a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/parameter/MultipartFileArrayProcessor.java
+++ b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/parameter/MultipartFileArrayProcessor.java
@@ -22,9 +22,11 @@ import java.lang.reflect.Type;
import org.apache.servicecomb.swagger.generator.core.processor.parameter.PartArrayParameterTypeProcessor;
import org.springframework.web.multipart.MultipartFile;
+import com.fasterxml.jackson.databind.type.TypeFactory;
+
public class MultipartFileArrayProcessor extends PartArrayParameterTypeProcessor {
@Override
public Type getProcessType() {
- return MultipartFile[].class;
+ return TypeFactory.defaultInstance().constructType(MultipartFile[].class);
}
}
diff --git a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/parameter/MultipartFileListProcessor.java b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/parameter/MultipartFileListProcessor.java
index 41be450a7..8b7f997de 100644
--- a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/parameter/MultipartFileListProcessor.java
+++ b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/parameter/MultipartFileListProcessor.java
@@ -23,11 +23,12 @@ import java.util.List;
import org.apache.servicecomb.swagger.generator.core.processor.parameter.PartArrayParameterTypeProcessor;
import org.springframework.web.multipart.MultipartFile;
+import com.fasterxml.jackson.databind.type.TypeFactory;
import com.google.inject.util.Types;
public class MultipartFileListProcessor extends PartArrayParameterTypeProcessor {
@Override
public Type getProcessType() {
- return Types.newParameterizedType(List.class, MultipartFile.class);
+ return TypeFactory.defaultInstance().constructType(Types.newParameterizedType(List.class, MultipartFile.class));
}
}