Search in sources :

Example 51 with Model

use of io.swagger.models.Model in project java-chassis by ServiceComb.

the class AnnotationUtils method generateResponseProperty.

public static Property generateResponseProperty(Swagger swagger, ResponseConfigBase config) throws Error {
    Class<?> responseClass = config.getResponseClass();
    if (responseClass == null || ReflectionUtils.isVoid(responseClass)) {
        return null;
    }
    if (!ClassUtils.isPrimitiveOrWrapper(responseClass)) {
        Map<String, Model> newDefinitions = ModelConverters.getInstance().readAll(responseClass);
        appendDefinition(swagger, newDefinitions);
    }
    Property property = ModelConverters.getInstance().readAsProperty(responseClass);
    // 根据swagger定义这里是区分大小写的, 虽然不明白为何这样做,不过还是不要改标准了
    switch(config.getResponseContainer()) {
        case "List":
            property = new ArrayProperty(property);
            break;
        case "Set":
            property = new ArrayProperty(property);
            ((ArrayProperty) property).setUniqueItems(true);
            break;
        case "Map":
            property = new MapProperty(property);
            break;
        case "":
            // 不必处理
            break;
        default:
            throw new Error("not support responseContainer " + config.getResponseContainer());
    }
    return property;
}
Also used : ArrayProperty(io.swagger.models.properties.ArrayProperty) MapProperty(io.swagger.models.properties.MapProperty) Model(io.swagger.models.Model) ArrayProperty(io.swagger.models.properties.ArrayProperty) Property(io.swagger.models.properties.Property) MapProperty(io.swagger.models.properties.MapProperty)

Example 52 with Model

use of io.swagger.models.Model in project java-chassis by ServiceComb.

the class TestSwaggerUtils method testConverter.

@Test
public void testConverter() {
    SwaggerGenerator generator = new SwaggerGeneratorForTest(context, null);
    Swagger swagger = generator.getSwagger();
    ParamUtils.addDefinitions(swagger, User.class);
    Model model = swagger.getDefinitions().get("User");
    model.getVendorExtensions().clear();
    JavaType javaType = ConverterMgr.findJavaType(generator, model);
    checkJavaType(swagger, javaType);
    RefModel refModel = new RefModel();
    refModel.setReference("User");
    javaType = ConverterMgr.findJavaType(generator, refModel);
    checkJavaType(swagger, javaType);
}
Also used : JavaType(com.fasterxml.jackson.databind.JavaType) RefModel(io.swagger.models.RefModel) Swagger(io.swagger.models.Swagger) RefModel(io.swagger.models.RefModel) Model(io.swagger.models.Model) SwaggerGeneratorForTest(io.servicecomb.swagger.generator.core.unittest.SwaggerGeneratorForTest) Test(org.junit.Test) SwaggerGeneratorForTest(io.servicecomb.swagger.generator.core.unittest.SwaggerGeneratorForTest)

Example 53 with Model

use of io.swagger.models.Model in project java-chassis by ServiceComb.

the class ArgumentsMapperFactory method processBodyFieldArgMapper.

// 将多个provider参数映射为契约body的field
// value为field在provider参数中的下标
protected void processBodyFieldArgMapper(ArgumentsMapperConfig config, int swaggerIdx) {
    Class<?>[] swaggerParameterTypes = config.getSwaggerMethod().getParameterTypes();
    Class<?> swaggerParameterType = swaggerParameterTypes[swaggerIdx];
    BodyParameter bp = (BodyParameter) config.getSwaggerParameters().get(swaggerIdx);
    Model model = bp.getSchema();
    if (RefModel.class.isInstance(model)) {
        String refName = ((RefModel) model).getSimpleRef();
        model = config.getSwagger().getDefinitions().get(refName);
    }
    Map<Integer, Field> fieldMap = new HashMap<>();
    for (String propertyName : model.getProperties().keySet()) {
        // 理论上应该只在provider的body类型的参数中查找,不过正常定义契约不会有问题的,先不用处理了
        int providerIdx = findInParameters(propertyName, config.getProviderParameters());
        if (providerIdx >= 0) {
            Field field = ReflectionUtils.findField(swaggerParameterType, propertyName);
            field.setAccessible(true);
            fieldMap.put(providerIdx, field);
            continue;
        }
        String msg = generateSkipParamInfo("body parameter field", config, propertyName);
        LOGGER.warn(msg);
    }
    ArgumentMapper bodyFieldArg = createBodyFieldArgMapper(config, swaggerIdx, fieldMap);
    config.addArgumentMapper(bodyFieldArg);
}
Also used : RefModel(io.swagger.models.RefModel) HashMap(java.util.HashMap) BodyParameter(io.swagger.models.parameters.BodyParameter) Field(java.lang.reflect.Field) RefModel(io.swagger.models.RefModel) Model(io.swagger.models.Model)

Example 54 with Model

use of io.swagger.models.Model in project camel by apache.

the class RestModelConverters method readClass.

public Map<String, Model> readClass(Class clazz) {
    String name = clazz.getName();
    Map<String, Model> resolved = super.read(clazz);
    if (resolved != null) {
        for (Model model : resolved.values()) {
            // enrich with the class name of the model
            model.getVendorExtensions().put("x-className", new StringProperty(name));
        }
        // read any extra using read-all
        Map<String, Model> extra = super.readAll(clazz);
        if (extra != null) {
            for (Map.Entry<String, Model> entry : extra.entrySet()) {
                if (!resolved.containsKey(entry.getKey())) {
                    resolved.put(entry.getKey(), entry.getValue());
                }
            }
        }
    }
    return resolved;
}
Also used : Model(io.swagger.models.Model) StringProperty(io.swagger.models.properties.StringProperty) Map(java.util.Map)

Example 55 with Model

use of io.swagger.models.Model in project swagger-core by swagger-api.

the class ModelResolver method resolveProperty.

public Property resolveProperty(JavaType propType, ModelConverterContext context, Annotation[] annotations, Iterator<ModelConverter> next) {
    LOGGER.debug("resolveProperty {}", propType);
    Property property = null;
    if (propType.isContainerType()) {
        JavaType keyType = propType.getKeyType();
        JavaType valueType = propType.getContentType();
        if (keyType != null && valueType != null) {
            property = new MapProperty().additionalProperties(context.resolveProperty(valueType, new Annotation[] {}));
        } else if (valueType != null) {
            Property items = context.resolveProperty(valueType, new Annotation[] {});
            // If property is XmlElement annotated, then use the name provided by annotation | https://github.com/swagger-api/swagger-core/issues/2047
            if (annotations != null && annotations.length > 0) {
                for (Annotation annotation : annotations) {
                    if (annotation instanceof XmlElement) {
                        XmlElement xmlElement = (XmlElement) annotation;
                        if (xmlElement != null && xmlElement.name() != null && !"".equals(xmlElement.name()) && !"##default".equals(xmlElement.name())) {
                            Xml xml = items.getXml() != null ? items.getXml() : new Xml();
                            xml.setName(xmlElement.name());
                            items.setXml(xml);
                        }
                    }
                }
            }
            ArrayProperty arrayProperty = new ArrayProperty().items(items);
            if (_isSetType(propType.getRawClass())) {
                arrayProperty.setUniqueItems(true);
            }
            property = arrayProperty;
        }
    } else {
        property = PrimitiveType.createProperty(propType);
    }
    if (property == null) {
        if (propType.isEnumType()) {
            property = new StringProperty();
            _addEnumProps(propType.getRawClass(), property);
        } else if (_isOptionalType(propType)) {
            property = context.resolveProperty(propType.containedType(0), null);
        } else {
            // complex type
            Model innerModel = context.resolve(propType);
            if (innerModel instanceof ComposedModel) {
                innerModel = ((ComposedModel) innerModel).getChild();
            }
            if (innerModel instanceof ModelImpl) {
                ModelImpl mi = (ModelImpl) innerModel;
                property = new RefProperty(StringUtils.isNotEmpty(mi.getReference()) ? mi.getReference() : mi.getName());
            }
        }
    }
    return property;
}
Also used : JavaType(com.fasterxml.jackson.databind.JavaType) ArrayProperty(io.swagger.models.properties.ArrayProperty) Xml(io.swagger.models.Xml) ComposedModel(io.swagger.models.ComposedModel) MapProperty(io.swagger.models.properties.MapProperty) Model(io.swagger.models.Model) RefModel(io.swagger.models.RefModel) ComposedModel(io.swagger.models.ComposedModel) ApiModel(io.swagger.annotations.ApiModel) XmlElement(javax.xml.bind.annotation.XmlElement) StringProperty(io.swagger.models.properties.StringProperty) ModelImpl(io.swagger.models.ModelImpl) JsonProperty(com.fasterxml.jackson.annotation.JsonProperty) StringProperty(io.swagger.models.properties.StringProperty) ArrayProperty(io.swagger.models.properties.ArrayProperty) Property(io.swagger.models.properties.Property) MapProperty(io.swagger.models.properties.MapProperty) UUIDProperty(io.swagger.models.properties.UUIDProperty) ApiModelProperty(io.swagger.annotations.ApiModelProperty) AbstractNumericProperty(io.swagger.models.properties.AbstractNumericProperty) RefProperty(io.swagger.models.properties.RefProperty) IntegerProperty(io.swagger.models.properties.IntegerProperty) Annotation(java.lang.annotation.Annotation) RefProperty(io.swagger.models.properties.RefProperty)

Aggregations

Model (io.swagger.models.Model)108 Test (org.testng.annotations.Test)90 Property (io.swagger.models.properties.Property)52 StringProperty (io.swagger.models.properties.StringProperty)34 ArrayModel (io.swagger.models.ArrayModel)30 ArrayProperty (io.swagger.models.properties.ArrayProperty)27 ModelImpl (io.swagger.models.ModelImpl)24 RefProperty (io.swagger.models.properties.RefProperty)23 RefModel (io.swagger.models.RefModel)20 ApiModelProperty (io.swagger.annotations.ApiModelProperty)19 ApiModel (io.swagger.annotations.ApiModel)16 BodyParameter (io.swagger.models.parameters.BodyParameter)15 IntegerProperty (io.swagger.models.properties.IntegerProperty)15 Operation (io.swagger.models.Operation)14 MapProperty (io.swagger.models.properties.MapProperty)14 Path (io.swagger.models.Path)13 LongProperty (io.swagger.models.properties.LongProperty)13 ComposedModel (io.swagger.models.ComposedModel)12 EmptyModel (io.swagger.models.EmptyModel)12 JacksonReadonlyModel (io.swagger.models.JacksonReadonlyModel)12