This is an automated email from the ASF dual-hosted git repository.
wujimin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/master by this push:
new 8020637 [SCB-2087] change swagger generator process type to JavaType
to support generic easier
8020637 is described below
commit 8020637a026c463cb8102aca6d26c192e76ea24a
Author: wujimin <[email protected]>
AuthorDate: Thu Sep 24 20:38:21 2020 +0800
[SCB-2087] change swagger generator process type to JavaType to support
generic easier
---
.../demo/jaxrs/client/TestDynamicConfig.java | 4 +-
.../dynamicconfig/test/DynamicConfigurationIT.java | 1 -
.../provider/pojo/definition/PojoConsumerMeta.java | 5 +-
.../pojo/definition/PojoConsumerOperationMeta.java | 17 +--
.../apache/servicecomb/swagger/SwaggerUtils.java | 4 +-
.../swagger/generator/ParameterGenerator.java | 15 ++-
.../swagger/generator/ParameterProcessor.java | 14 ++-
.../swagger/generator/SwaggerGeneratorUtils.java | 18 ++-
.../generator/core/AbstractOperationGenerator.java | 20 +--
.../AbstractSerializableParameterProcessor.java | 6 +-
.../parameter/ApiImplicitParamProcessor.java | 3 +-
.../processor/parameter/ApiParamProcessor.java | 7 +-
.../processor/parameter/JsonViewProcessor.java | 3 +-
.../processor/parameter/PartArrayProcessor.java | 4 +-
.../core/processor/parameter/PartProcessor.java | 4 +-
.../parameter/RawJsonRequestBodyProcessor.java | 6 +-
.../swagger/generator/core/utils/ParamUtils.java | 103 ---------------
.../generator/pojo/PojoOperationGenerator.java | 5 +-
.../generator/core/utils/TestParamUtils.java | 140 ---------------------
.../generator/jaxrs/JaxrsOperationGenerator.java | 8 +-
...actSpringmvcSerializableParameterProcessor.java | 6 +-
.../annotation/RequestBodyAnnotationProcessor.java | 4 +-
.../consumer/ConsumerArgumentsMapperCreator.java | 1 +
.../producer/ProducerArgumentsMapperCreator.java | 15 +--
24 files changed, 101 insertions(+), 312 deletions(-)
diff --git
a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/TestDynamicConfig.java
b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/TestDynamicConfig.java
index 2f275a2..9dfa234 100644
---
a/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/TestDynamicConfig.java
+++
b/demo/demo-jaxrs/jaxrs-client/src/main/java/org/apache/servicecomb/demo/jaxrs/client/TestDynamicConfig.java
@@ -28,9 +28,8 @@ import org.springframework.stereotype.Component;
@Component
public class TestDynamicConfig implements BootListener {
-
@InjectProperties(prefix = "jaxrstest.jaxrsclient")
- public class Configuration {
+ public static class Configuration {
/*
* 方法的 prefix 属性值 "override" 会覆盖标注在类定义的 @InjectProperties
* 注解的 prefix 属性值。
@@ -101,6 +100,7 @@ public class TestDynamicConfig implements BootListener {
public String strDef;
}
+ @Override
public void onAfterRegistry(BootEvent event) {
Configuration configuration =
SCBEngine.getInstance().getPriorityPropertyManager()
.createConfigObject(Configuration.class,
diff --git
a/integration-tests/dynamic-config-tests/src/test/java/org/apache/dynamicconfig/test/DynamicConfigurationIT.java
b/integration-tests/dynamic-config-tests/src/test/java/org/apache/dynamicconfig/test/DynamicConfigurationIT.java
index fbe557b..daa0f40 100644
---
a/integration-tests/dynamic-config-tests/src/test/java/org/apache/dynamicconfig/test/DynamicConfigurationIT.java
+++
b/integration-tests/dynamic-config-tests/src/test/java/org/apache/dynamicconfig/test/DynamicConfigurationIT.java
@@ -45,7 +45,6 @@ public class DynamicConfigurationIT {
vertx.close();
}
-
@Test
public void testDynamicConfiguration() {
Assert.assertEquals(6666,
DynamicPropertyFactory.getInstance().getIntProperty("timeout", 0).get());
diff --git
a/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerMeta.java
b/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerMeta.java
index 987eebe..ee68858 100644
---
a/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerMeta.java
+++
b/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerMeta.java
@@ -55,10 +55,9 @@ public class PojoConsumerMeta {
.createOperationGenerator(swaggerConsumerOperation.getConsumerMethod());
intfOperationGenerator.generateResponse();
PojoConsumerOperationMeta pojoConsumerOperationMeta = new
PojoConsumerOperationMeta(this, operationMeta,
- swaggerConsumerOperation, intfSwaggerGenerator.getSwagger(),
intfOperationGenerator.getOperation());
+ swaggerConsumerOperation);
- operationMetas.put(swaggerConsumerOperation.getConsumerMethod(),
- pojoConsumerOperationMeta);
+ operationMetas.put(swaggerConsumerOperation.getConsumerMethod(),
pojoConsumerOperationMeta);
}
}
diff --git
a/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerOperationMeta.java
b/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerOperationMeta.java
index 68d3b65..7199efe 100644
---
a/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerOperationMeta.java
+++
b/providers/provider-pojo/src/main/java/org/apache/servicecomb/provider/pojo/definition/PojoConsumerOperationMeta.java
@@ -24,13 +24,10 @@ import javax.servlet.http.Part;
import org.apache.servicecomb.core.definition.OperationMeta;
import org.apache.servicecomb.swagger.engine.SwaggerConsumerOperation;
-import org.apache.servicecomb.swagger.generator.core.utils.ParamUtils;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.type.TypeFactory;
-
-import io.swagger.models.Operation;
-import io.swagger.models.Swagger;
+import com.google.common.reflect.TypeToken;
public class PojoConsumerOperationMeta {
private PojoConsumerMeta pojoConsumerMeta;
@@ -42,17 +39,15 @@ public class PojoConsumerOperationMeta {
private JavaType responseType;
public PojoConsumerOperationMeta(PojoConsumerMeta pojoConsumerMeta,
OperationMeta operationMeta,
- SwaggerConsumerOperation swaggerConsumerOperation,
- Swagger intfSwagger, Operation intfOperation) {
+ SwaggerConsumerOperation swaggerConsumerOperation) {
this.pojoConsumerMeta = pojoConsumerMeta;
this.operationMeta = operationMeta;
this.swaggerConsumerOperation = swaggerConsumerOperation;
- Type intfResponseType = ParamUtils
- .getGenericParameterType(swaggerConsumerOperation.getConsumerClass(),
- swaggerConsumerOperation.getConsumerMethod().getDeclaringClass(),
-
swaggerConsumerOperation.getConsumerMethod().getGenericReturnType());
-
+ Type intfResponseType =
+ TypeToken.of(swaggerConsumerOperation.getConsumerClass())
+
.resolveType(swaggerConsumerOperation.getConsumerMethod().getGenericReturnType())
+ .getType();
if (intfResponseType instanceof Class &&
Part.class.isAssignableFrom((Class<?>) intfResponseType)) {
responseType = TypeFactory.defaultInstance().constructType(Part.class);
return;
diff --git
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java
index 30831ab..29fdb87 100644
---
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java
+++
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/SwaggerUtils.java
@@ -218,14 +218,14 @@ public final class SwaggerUtils {
}
}
- public static void setParameterType(Swagger swagger, Type type,
AbstractSerializableParameter<?> parameter) {
+ public static void setParameterType(Swagger swagger, JavaType type,
AbstractSerializableParameter<?> parameter) {
addDefinitions(swagger, type);
Property property = ModelConverters.getInstance().readAsProperty(type);
if (isComplexProperty(property)) {
// cannot set a simple parameter(header, query, etc.) as complex type
String msg = String
- .format("not allow complex type for %s parameter, type=%s.",
parameter.getIn(), type.getTypeName());
+ .format("not allow complex type for %s parameter, type=%s.",
parameter.getIn(), type.toCanonical());
throw new IllegalStateException(msg);
}
parameter.setProperty(property);
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 d291b6c..59a25c9 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
@@ -24,6 +24,9 @@ import java.util.Map;
import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.type.TypeFactory;
+
import io.swagger.models.parameters.Parameter;
public class ParameterGenerator {
@@ -34,13 +37,13 @@ public class ParameterGenerator {
/**
* when wrap parameters to body, genericType is null
*/
- private Type genericType;
+ private JavaType genericType;
private HttpParameterType httpParameterType;
private Parameter generatedParameter;
- public ParameterGenerator(String parameterName, List<Annotation>
annotations, Type genericType,
+ public ParameterGenerator(String parameterName, List<Annotation>
annotations, JavaType genericType,
HttpParameterType httpParameterType, Parameter generatedParameter) {
this.parameterName = parameterName;
this.annotations = annotations;
@@ -57,7 +60,8 @@ public class ParameterGenerator {
this.annotations =
SwaggerGeneratorUtils.collectParameterAnnotations(parameterAnnotations,
methodAnnotationMap,
parameterName);
- this.genericType = SwaggerGeneratorUtils.collectGenericType(annotations,
genericType);
+ this.genericType = TypeFactory.defaultInstance()
+ .constructType(SwaggerGeneratorUtils.collectGenericType(annotations,
genericType));
this.httpParameterType =
SwaggerGeneratorUtils.collectHttpParameterType(annotations, genericType);
}
@@ -73,7 +77,8 @@ public class ParameterGenerator {
public ParameterGenerator(String parameterName, List<Annotation>
annotations) {
this.parameterName = parameterName;
this.annotations = annotations;
- this.genericType = SwaggerGeneratorUtils.collectGenericType(annotations,
null);
+ this.genericType = TypeFactory.defaultInstance()
+ .constructType(SwaggerGeneratorUtils.collectGenericType(annotations,
null));
this.httpParameterType =
SwaggerGeneratorUtils.collectHttpParameterType(annotations, genericType);
}
@@ -85,7 +90,7 @@ public class ParameterGenerator {
return annotations;
}
- public Type getGenericType() {
+ public JavaType getGenericType() {
return genericType;
}
diff --git
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/ParameterProcessor.java
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/ParameterProcessor.java
index 7bb6610..8e3e7a0 100644
---
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/ParameterProcessor.java
+++
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/ParameterProcessor.java
@@ -20,12 +20,19 @@ import java.lang.reflect.Type;
import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.type.TypeFactory;
+
import io.swagger.models.Operation;
import io.swagger.models.Swagger;
public interface ParameterProcessor<SWAGGER_PARAMETER, ANNOTATION> {
Type getProcessType();
+ default JavaType getProcessJavaType() {
+ return TypeFactory.defaultInstance().constructType(getProcessType());
+ }
+
String getParameterName(ANNOTATION parameterAnnotation);
default Type getGenericType(ANNOTATION parameterAnnotation) {
@@ -34,6 +41,11 @@ public interface ParameterProcessor<SWAGGER_PARAMETER,
ANNOTATION> {
HttpParameterType getHttpParameterType(ANNOTATION parameterAnnotation);
- void fillParameter(Swagger swagger, Operation operation, SWAGGER_PARAMETER
parameter, Type type,
+ void fillParameter(Swagger swagger, Operation operation, SWAGGER_PARAMETER
parameter, JavaType type,
ANNOTATION annotation);
+
+ default void fillParameter(Swagger swagger, Operation operation,
SWAGGER_PARAMETER parameter, Type type,
+ ANNOTATION annotation) {
+ fillParameter(swagger, operation, parameter,
TypeFactory.defaultInstance().constructType(type), annotation);
+ }
}
diff --git
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/SwaggerGeneratorUtils.java
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/SwaggerGeneratorUtils.java
index 4d8e136..9d9a3b0 100644
---
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/SwaggerGeneratorUtils.java
+++
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/SwaggerGeneratorUtils.java
@@ -36,8 +36,10 @@ import
org.apache.servicecomb.swagger.generator.core.processor.response.DefaultR
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
+import com.fasterxml.jackson.databind.type.TypeFactory;
import io.swagger.models.parameters.Parameter;
import io.swagger.util.Json;
@@ -46,15 +48,17 @@ public final class SwaggerGeneratorUtils {
private static final Logger LOGGER =
LoggerFactory.getLogger(SwaggerGeneratorUtils.class);
// all static fields load from SPI and stateless
- private static Set<Type> contextTypes =
SPIServiceUtils.getOrLoadSortedService(SwaggerContextRegister.class).stream()
- .map(SwaggerContextRegister::getContextType)
+ private static Set<JavaType> contextTypes =
SPIServiceUtils.getOrLoadSortedService(SwaggerContextRegister.class)
+ .stream()
+ .map(swaggerContextRegister -> TypeFactory.defaultInstance()
+ .constructType(swaggerContextRegister.getContextType()))
.collect(Collectors.toSet());
private static Map<Type, ClassAnnotationProcessor<?>>
classAnnotationProcessors = new HashMap<>();
private static Map<Type, MethodAnnotationProcessor<?>>
methodAnnotationProcessors = new HashMap<>();
- private static Map<Type, ParameterProcessor<?, ?>> parameterProcessors = new
HashMap<>();
+ private static Map<JavaType, ParameterProcessor<?, ?>> parameterProcessors =
new HashMap<>();
private static Map<Type, ResponseTypeProcessor> responseTypeProcessors = new
HashMap<>();
@@ -79,9 +83,10 @@ public final class SwaggerGeneratorUtils {
}
for (ParameterProcessor<?, ?> processor :
SPIServiceUtils.getOrLoadSortedService(ParameterProcessor.class)) {
- if (parameterProcessors.putIfAbsent(processor.getProcessType(),
processor) != null) {
+ JavaType javaType = processor.getProcessJavaType();
+ if (parameterProcessors.putIfAbsent(javaType, processor) != null) {
LOGGER.info("ignore duplicated ParameterProcessor, type={},
processor={}.",
- processor.getProcessType().getTypeName(),
processor.getClass().getName());
+ javaType.toCanonical(), processor.getClass().getName());
}
}
@@ -112,6 +117,7 @@ public final class SwaggerGeneratorUtils {
@SuppressWarnings("unchecked")
public static <SWAGGER_PARAMETER, ANNOTATION>
ParameterProcessor<SWAGGER_PARAMETER, ANNOTATION> findParameterProcessors(
Type type) {
+ type = TypeFactory.defaultInstance().constructType(type);
return (ParameterProcessor<SWAGGER_PARAMETER, ANNOTATION>)
parameterProcessors.get(type);
}
@@ -128,7 +134,7 @@ public final class SwaggerGeneratorUtils {
return defaultResponseTypeProcessor;
}
- public static boolean isContextParameter(Type type) {
+ public static boolean isContextParameter(JavaType type) {
return contextTypes.contains(type);
}
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 0e38027..8d846e1 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
@@ -48,12 +48,12 @@ import
org.apache.servicecomb.swagger.generator.ResponseTypeProcessor;
import org.apache.servicecomb.swagger.generator.SwaggerConst;
import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
import org.apache.servicecomb.swagger.generator.core.utils.MethodUtils;
-import org.apache.servicecomb.swagger.generator.core.utils.ParamUtils;
import com.fasterxml.jackson.databind.BeanDescription;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
import com.fasterxml.jackson.databind.type.TypeFactory;
+import com.google.common.reflect.TypeToken;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -226,7 +226,9 @@ public abstract class AbstractOperationGenerator implements
OperationGenerator {
protected void initMethodParameterGenerators(Map<String, List<Annotation>>
methodAnnotationMap) {
for (java.lang.reflect.Parameter methodParameter : method.getParameters())
{
- Type genericType = ParamUtils.getGenericParameterType(clazz, method,
methodParameter);
+ Type genericType = TypeToken.of(clazz)
+ .resolveType(methodParameter.getParameterizedType())
+ .getType();
ParameterGenerator parameterGenerator = new ParameterGenerator(method,
methodAnnotationMap, methodParameter,
genericType);
validateParameter(parameterGenerator.getGenericType());
@@ -264,7 +266,7 @@ public abstract class AbstractOperationGenerator implements
OperationGenerator {
methodAnnotationMap,
propertyDefinition.getName(),
annotations,
- propertyDefinition.getPrimaryType().getRawClass());
+ propertyDefinition.getPrimaryType());
parameterGenerators.add(propertyParameterGenerator);
}
}
@@ -306,8 +308,8 @@ public abstract class AbstractOperationGenerator implements
OperationGenerator {
.add(annotation);
}
- protected void validateParameter(Type type) {
- if (type instanceof HttpServletResponse) {
+ protected void validateParameter(JavaType type) {
+ if (type.isTypeOrSubTypeOf(HttpServletResponse.class)) {
// not support, log the reason
throw new IllegalStateException(
"all input/output of ServiceComb operation are models, not allow to
use HttpServletResponse.");
@@ -359,7 +361,7 @@ public abstract class AbstractOperationGenerator implements
OperationGenerator {
}
}
- protected void fillParameter(Swagger swagger, Parameter parameter, String
parameterName, Type type,
+ protected void fillParameter(Swagger swagger, Parameter parameter, String
parameterName, JavaType type,
List<Annotation> annotations) {
for (Annotation annotation : annotations) {
ParameterProcessor<Parameter, Annotation> processor =
findParameterProcessors(annotation.annotationType());
@@ -492,8 +494,10 @@ public abstract class AbstractOperationGenerator
implements OperationGenerator {
}
protected Model createResponseModel() {
- Type responseType = ParamUtils
- .getGenericParameterType(clazz, method.getDeclaringClass(),
method.getGenericReturnType());
+ Type responseType =
+ TypeToken.of(clazz)
+ .resolveType(method.getGenericReturnType())
+ .getType();
if (ReflectionUtils.isVoid(responseType)) {
return null;
}
diff --git
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/AbstractSerializableParameterProcessor.java
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/AbstractSerializableParameterProcessor.java
index b9781b8..bc57b41 100644
---
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/AbstractSerializableParameterProcessor.java
+++
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/AbstractSerializableParameterProcessor.java
@@ -17,12 +17,12 @@
package org.apache.servicecomb.swagger.generator.core.processor.parameter;
-import java.lang.reflect.Type;
-
import org.apache.commons.lang3.StringUtils;
import org.apache.servicecomb.swagger.SwaggerUtils;
import org.apache.servicecomb.swagger.generator.ParameterProcessor;
+import com.fasterxml.jackson.databind.JavaType;
+
import io.swagger.models.Operation;
import io.swagger.models.Swagger;
import io.swagger.models.parameters.AbstractSerializableParameter;
@@ -30,7 +30,7 @@ import
io.swagger.models.parameters.AbstractSerializableParameter;
public abstract class AbstractSerializableParameterProcessor<SWAGGER_PARAMETER
extends AbstractSerializableParameter<?>, ANNOTATION> implements
ParameterProcessor<SWAGGER_PARAMETER, ANNOTATION> {
@Override
- public void fillParameter(Swagger swagger, Operation operation,
SWAGGER_PARAMETER parameter, Type type,
+ public void fillParameter(Swagger swagger, Operation operation,
SWAGGER_PARAMETER parameter, JavaType type,
ANNOTATION annotation) {
SwaggerUtils.setParameterType(swagger, type, parameter);
diff --git
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/ApiImplicitParamProcessor.java
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/ApiImplicitParamProcessor.java
index 484f006..b4528ae 100644
---
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/ApiImplicitParamProcessor.java
+++
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/ApiImplicitParamProcessor.java
@@ -22,6 +22,7 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.servicecomb.swagger.generator.ParameterProcessor;
import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
+import com.fasterxml.jackson.databind.JavaType;
import com.google.inject.util.Types;
import io.swagger.annotations.ApiImplicitParam;
@@ -65,7 +66,7 @@ public class ApiImplicitParamProcessor implements
ParameterProcessor<Parameter,
}
@Override
- public void fillParameter(Swagger swagger, Operation operation, Parameter
parameter, Type type,
+ public void fillParameter(Swagger swagger, Operation operation, Parameter
parameter, JavaType type,
ApiImplicitParam apiImplicitParam) {
// no need fill, will process by
io.swagger.util.ParameterProcessor.applyAnnotations
}
diff --git
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/ApiParamProcessor.java
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/ApiParamProcessor.java
index a2b780e..dcd1d74 100644
---
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/ApiParamProcessor.java
+++
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/ApiParamProcessor.java
@@ -16,11 +16,11 @@
*/
package org.apache.servicecomb.swagger.generator.core.processor.parameter;
-import java.lang.reflect.Type;
-
import org.apache.servicecomb.swagger.generator.ParameterProcessor;
import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
+import com.fasterxml.jackson.databind.JavaType;
+
import io.swagger.annotations.ApiParam;
import io.swagger.models.Operation;
import io.swagger.models.Swagger;
@@ -43,7 +43,8 @@ public class ApiParamProcessor implements
ParameterProcessor<Parameter, ApiParam
}
@Override
- public void fillParameter(Swagger swagger, Operation operation, Parameter
parameter, Type type, ApiParam annotation) {
+ public void fillParameter(Swagger swagger, Operation operation, Parameter
parameter, JavaType type,
+ ApiParam annotation) {
// no need fill, will process by
io.swagger.util.ParameterProcessor.applyAnnotations
}
}
diff --git
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/JsonViewProcessor.java
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/JsonViewProcessor.java
index 1f5e817..acbe566 100644
---
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/JsonViewProcessor.java
+++
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/JsonViewProcessor.java
@@ -24,6 +24,7 @@ import org.apache.servicecomb.swagger.generator.SwaggerConst;
import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
import com.fasterxml.jackson.annotation.JsonView;
+import com.fasterxml.jackson.databind.JavaType;
import io.swagger.models.Operation;
import io.swagger.models.Swagger;
@@ -47,7 +48,7 @@ public class JsonViewProcessor implements
ParameterProcessor<Parameter, Annotati
}
@Override
- public void fillParameter(Swagger swagger, Operation operation, Parameter
parameter, Type type,
+ public void fillParameter(Swagger swagger, Operation operation, Parameter
parameter, JavaType type,
Annotation annotation) {
if (!(annotation instanceof JsonView)) {
throw new IllegalArgumentException(
diff --git
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartArrayProcessor.java
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartArrayProcessor.java
index a6acd6b..4156287 100644
---
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartArrayProcessor.java
+++
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartArrayProcessor.java
@@ -24,6 +24,8 @@ import javax.servlet.http.Part;
import org.apache.servicecomb.swagger.generator.ParameterProcessor;
import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
+import com.fasterxml.jackson.databind.JavaType;
+
import io.swagger.models.Operation;
import io.swagger.models.Swagger;
import io.swagger.models.parameters.FormParameter;
@@ -48,7 +50,7 @@ public class PartArrayProcessor implements
ParameterProcessor<FormParameter, Ann
}
@Override
- public void fillParameter(Swagger swagger, Operation operation,
FormParameter parameter, Type type,
+ public void fillParameter(Swagger swagger, Operation operation,
FormParameter parameter, JavaType type,
Annotation annotation) {
Property property = new ArrayProperty(new FileProperty());
parameter.setProperty(property);
diff --git
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartProcessor.java
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartProcessor.java
index ac3703a..b09c11c 100644
---
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartProcessor.java
+++
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/PartProcessor.java
@@ -24,6 +24,8 @@ import javax.servlet.http.Part;
import org.apache.servicecomb.swagger.generator.ParameterProcessor;
import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
+import com.fasterxml.jackson.databind.JavaType;
+
import io.swagger.models.Operation;
import io.swagger.models.Swagger;
import io.swagger.models.parameters.FormParameter;
@@ -46,7 +48,7 @@ public class PartProcessor implements
ParameterProcessor<FormParameter, Annotati
}
@Override
- public void fillParameter(Swagger swagger, Operation operation,
FormParameter parameter, Type type,
+ public void fillParameter(Swagger swagger, Operation operation,
FormParameter parameter, JavaType type,
Annotation annotation) {
parameter.setType(new FileProperty().getType());
}
diff --git
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/RawJsonRequestBodyProcessor.java
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/RawJsonRequestBodyProcessor.java
index 6cfa07f..71ee994 100644
---
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/RawJsonRequestBodyProcessor.java
+++
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/processor/parameter/RawJsonRequestBodyProcessor.java
@@ -17,13 +17,13 @@
package org.apache.servicecomb.swagger.generator.core.processor.parameter;
-import java.lang.reflect.Type;
-
import org.apache.commons.lang3.StringUtils;
import org.apache.servicecomb.swagger.extend.annotations.RawJsonRequestBody;
import org.apache.servicecomb.swagger.generator.ParameterProcessor;
import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
+import com.fasterxml.jackson.databind.JavaType;
+
import io.swagger.models.Operation;
import io.swagger.models.Swagger;
import io.swagger.models.parameters.BodyParameter;
@@ -51,7 +51,7 @@ public class RawJsonRequestBodyProcessor implements
ParameterProcessor<BodyParam
}
@Override
- public void fillParameter(Swagger swagger, Operation operation,
BodyParameter parameter, Type type,
+ public void fillParameter(Swagger swagger, Operation operation,
BodyParameter parameter, JavaType type,
RawJsonRequestBody annotation) {
parameter.setVendorExtension("x-raw-json", true);
parameter.setRequired(annotation.required());
diff --git
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/utils/ParamUtils.java
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/utils/ParamUtils.java
deleted file mode 100644
index 0864045..0000000
---
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/utils/ParamUtils.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.swagger.generator.core.utils;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.GenericArrayType;
-import java.lang.reflect.Method;
-import java.lang.reflect.Parameter;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-
-import org.apache.commons.lang3.reflect.TypeUtils;
-
-public final class ParamUtils {
- private ParamUtils() {
-
- }
-
- public static Type getGenericParameterType(Class<?> mainClass, Method
method, Parameter param) {
- Type type = param.getParameterizedType();
- return getGenericParameterType(mainClass, method.getDeclaringClass(),
type);
- }
-
- public static Type getGenericParameterType(Class<?> mainClass, Class<?>
declaringClass, Type type) {
- if (type instanceof Class<?> || mainClass == declaringClass) {
- return type;
- }
-
- if (type instanceof TypeVariable) {
- TypeVariable<?>[] typeVariables = declaringClass.getTypeParameters();
- Type[] actualTypes;
- if (mainClass.getGenericSuperclass() != null) {
- actualTypes = getActualTypes(mainClass.getGenericSuperclass());
- } else {
- actualTypes = new Type[0];
- Type[] interfaceTypes = mainClass.getGenericInterfaces();
- for (Type t : interfaceTypes) {
- Type[] ttTypes = getActualTypes(t);
- Type[] tempTypes = new Type[actualTypes.length + ttTypes.length];
- System.arraycopy(actualTypes, 0, tempTypes, 0, actualTypes.length);
- System.arraycopy(ttTypes, 0, tempTypes, actualTypes.length,
ttTypes.length);
- actualTypes = tempTypes;
- }
- }
- if (typeVariables.length != actualTypes.length) {
- throw new IllegalArgumentException(String
- .format("not implement (%s) (%s) (%s), "
- + "e.g. extends multiple typed interface or too deep
inheritance.",
- mainClass.getName(), declaringClass.getName(),
type.getTypeName()));
- }
- for (int i = 0; i < typeVariables.length; i++) {
- if (typeVariables[i] == type) {
- return actualTypes[i];
- }
- }
- } else if (type instanceof GenericArrayType) {
- Class<?> t = (Class<?>) getGenericParameterType(mainClass,
declaringClass,
- ((GenericArrayType) type).getGenericComponentType());
- return Array.newInstance(t, 0).getClass();
- } else if (type instanceof ParameterizedType) {
- ParameterizedType parameterizedType = (ParameterizedType) type;
- Type[] targetTypes = new
Type[parameterizedType.getActualTypeArguments().length];
- for (int i = 0; i < parameterizedType.getActualTypeArguments().length;
i++) {
- targetTypes[i] = getGenericParameterType(mainClass, declaringClass,
- parameterizedType.getActualTypeArguments()[i]);
- }
- return TypeUtils.parameterize((Class) parameterizedType.getRawType(),
targetTypes);
- }
- throw new IllegalArgumentException(String
- .format("not implement (%s) (%s) (%s)",
- mainClass.getName(), declaringClass.getName(),
type.getTypeName()));
- }
-
- private static Type[] getActualTypes(Type type) {
- if (type instanceof Class<?>) {
- if (((Class<?>) type).getSuperclass() != null) {
- return getActualTypes(((Class<?>) type).getSuperclass());
- } else {
- return getActualTypes(((Class<?>) type).getGenericInterfaces()[0]);
- }
- }
- if (type instanceof ParameterizedType) {
- return ((ParameterizedType) type).getActualTypeArguments();
- }
- return new Type[0];
- }
-}
diff --git
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/pojo/PojoOperationGenerator.java
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/pojo/PojoOperationGenerator.java
index 141d2ea..eb6b8de 100644
---
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/pojo/PojoOperationGenerator.java
+++
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/pojo/PojoOperationGenerator.java
@@ -18,7 +18,6 @@ package org.apache.servicecomb.swagger.generator.pojo;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
-import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -37,6 +36,8 @@ import
org.apache.servicecomb.swagger.generator.core.AbstractSwaggerGenerator;
import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
import org.apache.servicecomb.swagger.generator.core.utils.MethodUtils;
+import com.fasterxml.jackson.databind.JavaType;
+
import io.swagger.converter.ModelConverters;
import io.swagger.models.ModelImpl;
import io.swagger.models.RefModel;
@@ -133,7 +134,7 @@ public class PojoOperationGenerator extends
AbstractOperationGenerator {
}
@Override
- protected void fillParameter(Swagger swagger, Parameter parameter, String
parameterName, Type type,
+ protected void fillParameter(Swagger swagger, Parameter parameter, String
parameterName, JavaType type,
List<Annotation> annotations) {
if (isWrapBody(parameter)) {
return;
diff --git
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/utils/TestParamUtils.java
b/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/utils/TestParamUtils.java
deleted file mode 100644
index 87c28a0..0000000
---
a/swagger/swagger-generator/generator-core/src/test/java/org/apache/servicecomb/swagger/generator/core/utils/TestParamUtils.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.servicecomb.swagger.generator.core.utils;
-
-import static org.junit.Assert.assertEquals;
-
-import java.lang.reflect.Method;
-import java.util.List;
-
-import org.apache.commons.lang3.reflect.TypeUtils;
-import
org.apache.servicecomb.swagger.generator.core.utils.paramUtilsModel.AbstractBaseService;
-import
org.apache.servicecomb.swagger.generator.core.utils.paramUtilsModel.AbstractBean;
-import
org.apache.servicecomb.swagger.generator.core.utils.paramUtilsModel.IBaseService;
-import
org.apache.servicecomb.swagger.generator.core.utils.paramUtilsModel.IMyService;
-import
org.apache.servicecomb.swagger.generator.core.utils.paramUtilsModel.MyEndpoint;
-import
org.apache.servicecomb.swagger.generator.core.utils.paramUtilsModel.MyEndpoint2;
-import
org.apache.servicecomb.swagger.generator.core.utils.paramUtilsModel.PersonBean;
-import org.junit.Assert;
-import org.junit.Test;
-import org.springframework.web.multipart.MultipartFile;
-
-public class TestParamUtils {
-
- @Test
- public void testGenericTypeInheritance() throws Exception {
- Method hello = IMyService.class.getMethod("hello", AbstractBean.class);
- assertEquals(PersonBean.class,
- ParamUtils.getGenericParameterType(IMyService.class,
IBaseService.class, hello.getGenericReturnType()));
- assertEquals(PersonBean.class,
- ParamUtils.getGenericParameterType(IMyService.class, hello,
hello.getParameters()[0]));
-
- hello = MyEndpoint.class.getMethod("hello", AbstractBean.class);
- assertEquals(PersonBean.class,
- ParamUtils.getGenericParameterType(MyEndpoint.class,
AbstractBaseService.class, hello.getGenericReturnType()));
- assertEquals(PersonBean.class,
- ParamUtils.getGenericParameterType(MyEndpoint.class, hello,
hello.getParameters()[0]));
-
- hello = MyEndpoint2.class.getMethod("hello", PersonBean.class);
- assertEquals(PersonBean.class,
- ParamUtils.getGenericParameterType(MyEndpoint2.class,
MyEndpoint2.class, hello.getGenericReturnType()));
- assertEquals(PersonBean.class,
- ParamUtils.getGenericParameterType(MyEndpoint2.class, hello,
hello.getParameters()[0]));
-
- Method helloBody = IMyService.class.getMethod("helloBody",
AbstractBean[].class);
- assertEquals(PersonBean[].class,
- ParamUtils.getGenericParameterType(IMyService.class,
IBaseService.class, helloBody.getGenericReturnType()));
- assertEquals(PersonBean[].class,
- ParamUtils.getGenericParameterType(MyEndpoint.class, helloBody,
helloBody.getParameters()[0]));
-
- helloBody = MyEndpoint.class.getMethod("helloBody", AbstractBean[].class);
- assertEquals(PersonBean[].class, ParamUtils
- .getGenericParameterType(MyEndpoint.class, AbstractBaseService.class,
helloBody.getGenericReturnType()));
- assertEquals(PersonBean[].class,
- ParamUtils.getGenericParameterType(MyEndpoint.class, helloBody,
helloBody.getParameters()[0]));
-
- Method helloList = IMyService.class.getMethod("helloList", List.class);
- assertEquals(TypeUtils.parameterize(List.class, PersonBean.class),
- ParamUtils.getGenericParameterType(IMyService.class,
IBaseService.class, helloList.getGenericReturnType()));
- assertEquals(TypeUtils.parameterize(List.class, PersonBean.class),
- ParamUtils.getGenericParameterType(IMyService.class, helloList,
helloList.getParameters()[0]));
-
- helloList = MyEndpoint.class.getMethod("helloList", List.class);
- assertEquals(TypeUtils.parameterize(List.class, PersonBean.class),
ParamUtils
- .getGenericParameterType(MyEndpoint.class, AbstractBaseService.class,
helloList.getGenericReturnType()));
- assertEquals(TypeUtils.parameterize(List.class, PersonBean.class),
- ParamUtils.getGenericParameterType(MyEndpoint.class, helloList,
helloList.getParameters()[0]));
-
- Method actual = IMyService.class.getMethod("actual", PersonBean.class);
- assertEquals(PersonBean.class,
- ParamUtils.getGenericParameterType(IMyService.class,
IBaseService.class, actual.getGenericReturnType()));
- assertEquals(PersonBean.class,
- ParamUtils.getGenericParameterType(IMyService.class, actual,
actual.getParameters()[0]));
-
- helloList = MyEndpoint.class.getMethod("actual", PersonBean.class);
- assertEquals(PersonBean.class,
- ParamUtils
- .getGenericParameterType(MyEndpoint.class,
AbstractBaseService.class, helloList.getGenericReturnType()));
- assertEquals(PersonBean.class,
- ParamUtils.getGenericParameterType(MyEndpoint.class, helloList,
helloList.getParameters()[0]));
-
- Method parentHello = IMyService.class.getMethod("parentHello", List.class);
- assertEquals(TypeUtils.parameterize(List.class, MultipartFile.class),
- ParamUtils
- .getGenericParameterType(IMyService.class, IMyService.class,
parentHello.getGenericReturnType()));
- assertEquals(TypeUtils.parameterize(List.class, MultipartFile.class),
- ParamUtils
- .getGenericParameterType(IMyService.class, parentHello,
parentHello.getParameters()[0]));
- }
-
- @Test
- public void testGenericTypeInheritanceWithMethodUtils() throws Exception {
- List<Method> methods = MethodUtils.findSwaggerMethods(MyEndpoint.class);
- Assert.assertEquals(5, methods.size());
- assertEquals(PersonBean.class, ParamUtils
- .getGenericParameterType(MyEndpoint.class,
methods.get(0).getDeclaringClass(),
- methods.get(0).getGenericReturnType())); // actual
- assertEquals(PersonBean.class, ParamUtils
- .getGenericParameterType(MyEndpoint.class, methods.get(0),
- methods.get(0).getParameters()[0])); // actual
- assertEquals(PersonBean.class, ParamUtils
- .getGenericParameterType(MyEndpoint.class,
methods.get(1).getDeclaringClass(),
- methods.get(1).getGenericReturnType())); // hello
- assertEquals(PersonBean.class, ParamUtils
- .getGenericParameterType(MyEndpoint.class, methods.get(1),
- methods.get(1).getParameters()[0])); // hello
- assertEquals(PersonBean[].class, ParamUtils
- .getGenericParameterType(MyEndpoint.class,
methods.get(2).getDeclaringClass(),
- methods.get(2).getGenericReturnType())); // helloBody
- assertEquals(PersonBean[].class, ParamUtils
- .getGenericParameterType(MyEndpoint.class, methods.get(2),
- methods.get(2).getParameters()[0])); // helloBody
- assertEquals(TypeUtils.parameterize(List.class, PersonBean.class),
ParamUtils
- .getGenericParameterType(MyEndpoint.class,
methods.get(3).getDeclaringClass(),
- methods.get(3).getGenericReturnType())); // helloList
- assertEquals(TypeUtils.parameterize(List.class, PersonBean.class),
ParamUtils
- .getGenericParameterType(MyEndpoint.class, methods.get(3),
- methods.get(3).getParameters()[0])); // helloList
- assertEquals(TypeUtils.parameterize(List.class, MultipartFile.class),
ParamUtils
- .getGenericParameterType(MyEndpoint.class,
methods.get(4).getDeclaringClass(),
- methods.get(4).getGenericReturnType())); // parentHello
- assertEquals(TypeUtils.parameterize(List.class, MultipartFile.class),
ParamUtils
- .getGenericParameterType(MyEndpoint.class, methods.get(4),
- methods.get(4).getParameters()[0])); // parentHello
- }
-}
diff --git
a/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/JaxrsOperationGenerator.java
b/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/JaxrsOperationGenerator.java
index 999d023..b1f23c3 100644
---
a/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/JaxrsOperationGenerator.java
+++
b/swagger/swagger-generator/generator-jaxrs/src/main/java/org/apache/servicecomb/swagger/generator/jaxrs/JaxrsOperationGenerator.java
@@ -19,7 +19,6 @@ package org.apache.servicecomb.swagger.generator.jaxrs;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
-import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
@@ -30,6 +29,7 @@ import
org.apache.servicecomb.swagger.generator.core.AbstractSwaggerGenerator;
import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
import org.apache.servicecomb.swagger.generator.rest.RestOperationGenerator;
+import com.fasterxml.jackson.databind.JavaType;
import com.google.common.base.Defaults;
import io.swagger.models.Swagger;
@@ -56,20 +56,20 @@ public class JaxrsOperationGenerator extends
RestOperationGenerator {
@Override
protected void fillParameter(Swagger swagger,
io.swagger.models.parameters.Parameter parameter, String parameterName,
- Type type, List<Annotation> annotations) {
+ JavaType type, List<Annotation> annotations) {
super.fillParameter(swagger, parameter, parameterName, type, annotations);
if (!(parameter instanceof AbstractSerializableParameter)) {
return;
}
- if (!(type instanceof Class && ((Class) type).isPrimitive())) {
+ if (!type.isPrimitive()) {
return;
}
AbstractSerializableParameter<?> serializableParameter =
(AbstractSerializableParameter<?>) parameter;
if (serializableParameter.getDefault() == null &&
!parameter.getRequired()) {
-
serializableParameter.setDefaultValue(String.valueOf(Defaults.defaultValue((Class<?>)
type)));
+
serializableParameter.setDefaultValue(String.valueOf(Defaults.defaultValue(type.getRawClass())));
}
}
}
diff --git
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/AbstractSpringmvcSerializableParameterProcessor.java
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/AbstractSpringmvcSerializableParameterProcessor.java
index e9ceb24..db3dbed 100644
---
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/AbstractSpringmvcSerializableParameterProcessor.java
+++
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/AbstractSpringmvcSerializableParameterProcessor.java
@@ -17,13 +17,13 @@
package
org.apache.servicecomb.swagger.generator.springmvc.processor.annotation;
-import java.lang.reflect.Type;
-
import org.apache.commons.lang3.StringUtils;
import
org.apache.servicecomb.swagger.generator.core.processor.parameter.AbstractSerializableParameterProcessor;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.ValueConstants;
+import com.fasterxml.jackson.databind.JavaType;
+
import io.swagger.models.Operation;
import io.swagger.models.Swagger;
import io.swagger.models.parameters.AbstractSerializableParameter;
@@ -31,7 +31,7 @@ import
io.swagger.models.parameters.AbstractSerializableParameter;
public abstract class
AbstractSpringmvcSerializableParameterProcessor<SWAGGER_PARAMETER extends
AbstractSerializableParameter<?>, ANNOTATION> extends
AbstractSerializableParameterProcessor<SWAGGER_PARAMETER, ANNOTATION> {
@Override
- public void fillParameter(Swagger swagger, Operation operation,
SWAGGER_PARAMETER parameter, Type type,
+ public void fillParameter(Swagger swagger, Operation operation,
SWAGGER_PARAMETER parameter, JavaType type,
ANNOTATION annotation) {
super.fillParameter(swagger, operation, parameter, type, annotation);
diff --git
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestBodyAnnotationProcessor.java
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestBodyAnnotationProcessor.java
index 83374a6..24fbfa6 100644
---
a/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestBodyAnnotationProcessor.java
+++
b/swagger/swagger-generator/generator-springmvc/src/main/java/org/apache/servicecomb/swagger/generator/springmvc/processor/annotation/RequestBodyAnnotationProcessor.java
@@ -23,6 +23,8 @@ import
org.apache.servicecomb.swagger.generator.ParameterProcessor;
import org.apache.servicecomb.swagger.generator.core.model.HttpParameterType;
import org.springframework.web.bind.annotation.RequestBody;
+import com.fasterxml.jackson.databind.JavaType;
+
import io.swagger.models.Operation;
import io.swagger.models.Swagger;
import io.swagger.models.parameters.BodyParameter;
@@ -44,7 +46,7 @@ public class RequestBodyAnnotationProcessor implements
ParameterProcessor<BodyPa
}
@Override
- public void fillParameter(Swagger swagger, Operation operation,
BodyParameter bodyParameter, Type type,
+ public void fillParameter(Swagger swagger, Operation operation,
BodyParameter bodyParameter, JavaType type,
RequestBody requestBody) {
bodyParameter.setRequired(requestBody.required());
}
diff --git
a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentsMapperCreator.java
b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentsMapperCreator.java
index 53921b1..42b74dc 100644
---
a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentsMapperCreator.java
+++
b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/consumer/ConsumerArgumentsMapperCreator.java
@@ -101,6 +101,7 @@ public class ConsumerArgumentsMapperCreator extends
AbstractArgumentsMapperCreat
this.swaggerParameters.get(swaggerBodyIdx).getName(), parameterName);
}
+ @Override
protected void processBeanParameter(int consumerParamIdx,
java.lang.reflect.Parameter consumerParameter) {
ConsumerBeanParamMapper mapper = new ConsumerBeanParamMapper(
this.providerMethod.getParameters()[consumerParamIdx].getName());
diff --git
a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/ProducerArgumentsMapperCreator.java
b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/ProducerArgumentsMapperCreator.java
index aec3852..b27aea0 100644
---
a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/ProducerArgumentsMapperCreator.java
+++
b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/invocation/arguments/producer/ProducerArgumentsMapperCreator.java
@@ -28,7 +28,6 @@ import java.util.Map;
import org.apache.servicecomb.foundation.common.utils.LambdaMetafactoryUtils;
import org.apache.servicecomb.foundation.common.utils.bean.Setter;
import org.apache.servicecomb.swagger.generator.core.model.SwaggerOperation;
-import org.apache.servicecomb.swagger.generator.core.utils.ParamUtils;
import
org.apache.servicecomb.swagger.invocation.arguments.AbstractArgumentsMapperCreator;
import org.apache.servicecomb.swagger.invocation.arguments.ArgumentMapper;
import
org.apache.servicecomb.swagger.invocation.arguments.ContextArgumentMapperFactory;
@@ -37,6 +36,7 @@ import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.SerializationConfig;
import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
import com.fasterxml.jackson.databind.type.TypeFactory;
+import com.google.common.reflect.TypeToken;
public class ProducerArgumentsMapperCreator extends
AbstractArgumentsMapperCreator {
// swagger parameter types relate to producer
@@ -76,8 +76,9 @@ public class ProducerArgumentsMapperCreator extends
AbstractArgumentsMapperCreat
@Override
protected ArgumentMapper createKnownParameterMapper(int providerParamIdx,
Integer swaggerIdx) {
String swaggerArgumentName = swaggerParameters.get(swaggerIdx).getName();
- final Type providerType =
ParamUtils.getGenericParameterType(this.providerClass, this.providerMethod,
- this.providerMethod.getParameters()[providerParamIdx]);
+ Type providerType = TypeToken.of(providerClass)
+
.resolveType(providerMethod.getGenericParameterTypes()[providerParamIdx])
+ .getType();
swaggerParameterTypes
.put(swaggerArgumentName, providerType);
return new
ProducerArgumentSame(providerMethod.getParameters()[providerParamIdx].getName(),
swaggerArgumentName);
@@ -87,10 +88,10 @@ public class ProducerArgumentsMapperCreator extends
AbstractArgumentsMapperCreat
protected ArgumentMapper createSwaggerBodyFieldMapper(int producerParamIdx,
String parameterName,
int swaggerBodyIdx) {
String swaggerArgumentName =
swaggerParameters.get(swaggerBodyIdx).getName();
- swaggerParameterTypes
- .put(swaggerArgumentName, Object.class);
- Type parameterType =
ParamUtils.getGenericParameterType(this.providerClass, this.providerMethod,
- providerMethod.getParameters()[producerParamIdx]);
+ swaggerParameterTypes.put(swaggerArgumentName, Object.class);
+ Type parameterType = TypeToken.of(providerClass)
+
.resolveType(providerMethod.getGenericParameterTypes()[producerParamIdx])
+ .getType();
return new
SwaggerBodyFieldToProducerArgument(providerMethod.getParameters()[producerParamIdx].getName(),
swaggerArgumentName,
parameterName, parameterType);