Search in sources :

Example 1 with ParameterGenerator

use of org.apache.servicecomb.swagger.generator.ParameterGenerator in project java-chassis by ServiceComb.

the class PojoOperationGenerator method wrapParametersToBody.

private void wrapParametersToBody(List<ParameterGenerator> bodyFields) {
    String simpleRef = MethodUtils.findSwaggerMethodName(method) + "Body";
    bodyModel = new ModelImpl();
    bodyModel.setType(ModelImpl.OBJECT);
    for (ParameterGenerator parameterGenerator : bodyFields) {
        // to collect all information by swagger mechanism
        // must have a parameter type
        // but all these parameters will be wrap to be one body parameter, their parameter type must be null
        // so we first set to be BODY, after collected, set back to be null
        parameterGenerator.setHttpParameterType(HttpParameterType.BODY);
        scanMethodParameter(parameterGenerator);
        Property property = ModelConverters.getInstance().readAsProperty(parameterGenerator.getGenericType());
        property.setDescription(parameterGenerator.getGeneratedParameter().getDescription());
        bodyModel.addProperty(parameterGenerator.getParameterName(), property);
        parameterGenerator.setHttpParameterType(null);
    }
    swagger.addDefinition(simpleRef, bodyModel);
    SwaggerGeneratorFeature feature = swaggerGenerator.getSwaggerGeneratorFeature();
    // if not care for this, then can just delete all logic about EXT_JAVA_CLASS/EXT_JAVA_INTF
    if (feature.isExtJavaClassInVendor() && bodyFields.size() > 1 && StringUtils.isNotEmpty(feature.getPackageName())) {
        bodyModel.getVendorExtensions().put(SwaggerConst.EXT_JAVA_CLASS, feature.getPackageName() + "." + simpleRef);
    }
    RefModel refModel = new RefModel();
    refModel.setReference("#/definitions/" + simpleRef);
    bodyParameter = new BodyParameter();
    bodyParameter.name(simpleRef);
    bodyParameter.setSchema(refModel);
    bodyParameter.setName(parameterGenerators.size() == 1 ? parameterGenerators.get(0).getParameterName() : simpleRef);
    List<ParameterGenerator> newParameterGenerators = new ArrayList<>();
    newParameterGenerators.add(new ParameterGenerator(bodyParameter.getName(), Collections.emptyList(), null, HttpParameterType.BODY, bodyParameter));
    parameterGenerators.stream().filter(p -> p.getHttpParameterType() != null).forEach(p -> newParameterGenerators.add(p));
    parameterGenerators = newParameterGenerators;
}
Also used : ModelConverters(io.swagger.converter.ModelConverters) Swagger(io.swagger.models.Swagger) HttpParameterType(org.apache.servicecomb.swagger.generator.core.model.HttpParameterType) SwaggerUtils(org.apache.servicecomb.swagger.SwaggerUtils) ModelImpl(io.swagger.models.ModelImpl) StringUtils(org.apache.commons.lang3.StringUtils) HttpMethod(javax.ws.rs.HttpMethod) ArrayList(java.util.ArrayList) Map(java.util.Map) SwaggerGeneratorFeature(org.apache.servicecomb.swagger.generator.SwaggerGeneratorFeature) AbstractOperationGenerator(org.apache.servicecomb.swagger.generator.core.AbstractOperationGenerator) JavaType(com.fasterxml.jackson.databind.JavaType) Method(java.lang.reflect.Method) Property(io.swagger.models.properties.Property) RefModel(io.swagger.models.RefModel) BodyParameter(io.swagger.models.parameters.BodyParameter) AbstractSwaggerGenerator(org.apache.servicecomb.swagger.generator.core.AbstractSwaggerGenerator) Parameter(io.swagger.models.parameters.Parameter) MethodUtils(org.apache.servicecomb.swagger.generator.core.utils.MethodUtils) Collectors(java.util.stream.Collectors) List(java.util.List) ParameterGenerator(org.apache.servicecomb.swagger.generator.ParameterGenerator) SwaggerConst(org.apache.servicecomb.swagger.generator.SwaggerConst) Annotation(java.lang.annotation.Annotation) Collections(java.util.Collections) SwaggerGeneratorFeature(org.apache.servicecomb.swagger.generator.SwaggerGeneratorFeature) RefModel(io.swagger.models.RefModel) ArrayList(java.util.ArrayList) ModelImpl(io.swagger.models.ModelImpl) ParameterGenerator(org.apache.servicecomb.swagger.generator.ParameterGenerator) BodyParameter(io.swagger.models.parameters.BodyParameter) Property(io.swagger.models.properties.Property)

Example 2 with ParameterGenerator

use of org.apache.servicecomb.swagger.generator.ParameterGenerator in project java-chassis by ServiceComb.

the class AbstractOperationGenerator method extractAggregatedParameterGenerators.

protected void extractAggregatedParameterGenerators(Map<String, List<Annotation>> methodAnnotationMap, java.lang.reflect.Parameter methodParameter) {
    JavaType javaType = TypeFactory.defaultInstance().constructType(methodParameter.getParameterizedType());
    BeanDescription beanDescription = Json.mapper().getSerializationConfig().introspect(javaType);
    for (BeanPropertyDefinition propertyDefinition : beanDescription.findProperties()) {
        if (!propertyDefinition.couldSerialize()) {
            continue;
        }
        Annotation[] annotations = collectAnnotations(propertyDefinition);
        ParameterGenerator propertyParameterGenerator = new ParameterGenerator(method, methodAnnotationMap, propertyDefinition.getName(), annotations, propertyDefinition.getPrimaryType());
        parameterGenerators.add(propertyParameterGenerator);
    }
}
Also used : JavaType(com.fasterxml.jackson.databind.JavaType) BeanDescription(com.fasterxml.jackson.databind.BeanDescription) BeanPropertyDefinition(com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition) ParameterGenerator(org.apache.servicecomb.swagger.generator.ParameterGenerator) Annotation(java.lang.annotation.Annotation)

Example 3 with ParameterGenerator

use of org.apache.servicecomb.swagger.generator.ParameterGenerator in project java-chassis by ServiceComb.

the class AbstractOperationGenerator method initMethodParameterGenerators.

protected void initMethodParameterGenerators(Map<String, List<Annotation>> methodAnnotationMap) {
    for (java.lang.reflect.Parameter methodParameter : method.getParameters()) {
        Type genericType = TypeToken.of(clazz).resolveType(methodParameter.getParameterizedType()).getType();
        ParameterGenerator parameterGenerator = new ParameterGenerator(method, methodAnnotationMap, methodParameter, genericType);
        validateParameter(parameterGenerator.getGenericType());
        if (isContextParameter(parameterGenerator.getGenericType())) {
            continue;
        }
        // springmvc: is query, and is bean type
        if (isAggregatedParameter(parameterGenerator, methodParameter)) {
            extractAggregatedParameterGenerators(methodAnnotationMap, methodParameter);
            continue;
        }
        parameterGenerators.add(parameterGenerator);
    }
}
Also used : MediaType(javax.ws.rs.core.MediaType) Type(java.lang.reflect.Type) HttpParameterType(org.apache.servicecomb.swagger.generator.core.model.HttpParameterType) JavaType(com.fasterxml.jackson.databind.JavaType) ParameterGenerator(org.apache.servicecomb.swagger.generator.ParameterGenerator)

Example 4 with ParameterGenerator

use of org.apache.servicecomb.swagger.generator.ParameterGenerator in project java-chassis by ServiceComb.

the class AbstractOperationGenerator method initRemainMethodAnnotationsParameterGenerators.

protected void initRemainMethodAnnotationsParameterGenerators(Map<String, List<Annotation>> methodAnnotationMap) {
    for (Entry<String, List<Annotation>> entry : methodAnnotationMap.entrySet()) {
        ParameterGenerator parameterGenerator = new ParameterGenerator(entry.getKey(), entry.getValue());
        parameterGenerators.add(parameterGenerator);
    }
}
Also used : ParameterGenerator(org.apache.servicecomb.swagger.generator.ParameterGenerator)

Example 5 with ParameterGenerator

use of org.apache.servicecomb.swagger.generator.ParameterGenerator in project java-chassis by ServiceComb.

the class PojoOperationGenerator method tryWrapParametersToBody.

private void tryWrapParametersToBody() {
    List<ParameterGenerator> bodyFields = parameterGenerators.stream().filter(pg -> pg.getHttpParameterType() == null).collect(Collectors.toList());
    if (bodyFields.isEmpty()) {
        return;
    }
    if (bodyFields.size() == 1 && SwaggerUtils.isBean(bodyFields.get(0).getGenericType())) {
        ParameterGenerator parameterGenerator = bodyFields.get(0);
        parameterGenerator.setHttpParameterType(HttpParameterType.BODY);
        return;
    }
    // wrap parameters to body
    wrapParametersToBody(bodyFields);
}
Also used : ModelConverters(io.swagger.converter.ModelConverters) Swagger(io.swagger.models.Swagger) HttpParameterType(org.apache.servicecomb.swagger.generator.core.model.HttpParameterType) SwaggerUtils(org.apache.servicecomb.swagger.SwaggerUtils) ModelImpl(io.swagger.models.ModelImpl) StringUtils(org.apache.commons.lang3.StringUtils) HttpMethod(javax.ws.rs.HttpMethod) ArrayList(java.util.ArrayList) Map(java.util.Map) SwaggerGeneratorFeature(org.apache.servicecomb.swagger.generator.SwaggerGeneratorFeature) AbstractOperationGenerator(org.apache.servicecomb.swagger.generator.core.AbstractOperationGenerator) JavaType(com.fasterxml.jackson.databind.JavaType) Method(java.lang.reflect.Method) Property(io.swagger.models.properties.Property) RefModel(io.swagger.models.RefModel) BodyParameter(io.swagger.models.parameters.BodyParameter) AbstractSwaggerGenerator(org.apache.servicecomb.swagger.generator.core.AbstractSwaggerGenerator) Parameter(io.swagger.models.parameters.Parameter) MethodUtils(org.apache.servicecomb.swagger.generator.core.utils.MethodUtils) Collectors(java.util.stream.Collectors) List(java.util.List) ParameterGenerator(org.apache.servicecomb.swagger.generator.ParameterGenerator) SwaggerConst(org.apache.servicecomb.swagger.generator.SwaggerConst) Annotation(java.lang.annotation.Annotation) Collections(java.util.Collections) ParameterGenerator(org.apache.servicecomb.swagger.generator.ParameterGenerator)

Aggregations

ParameterGenerator (org.apache.servicecomb.swagger.generator.ParameterGenerator)6 JavaType (com.fasterxml.jackson.databind.JavaType)4 Annotation (java.lang.annotation.Annotation)3 HttpParameterType (org.apache.servicecomb.swagger.generator.core.model.HttpParameterType)3 ModelConverters (io.swagger.converter.ModelConverters)2 ModelImpl (io.swagger.models.ModelImpl)2 RefModel (io.swagger.models.RefModel)2 Swagger (io.swagger.models.Swagger)2 BodyParameter (io.swagger.models.parameters.BodyParameter)2 Parameter (io.swagger.models.parameters.Parameter)2 Property (io.swagger.models.properties.Property)2 Method (java.lang.reflect.Method)2 ArrayList (java.util.ArrayList)2 Collections (java.util.Collections)2 List (java.util.List)2 Map (java.util.Map)2 Collectors (java.util.stream.Collectors)2 HttpMethod (javax.ws.rs.HttpMethod)2 StringUtils (org.apache.commons.lang3.StringUtils)2 SwaggerUtils (org.apache.servicecomb.swagger.SwaggerUtils)2