Search in sources :

Example 26 with AnnotatedType

use of io.swagger.v3.core.converter.AnnotatedType in project swagger-core by swagger-api.

the class ModelResolver method resolveSchemaProperties.

protected Map<String, Schema> resolveSchemaProperties(JavaType a, Annotation[] annotations, ModelConverterContext context) {
    final Map<String, SchemaProperty> propList = new LinkedHashMap<>();
    SchemaProperties props = a.getRawClass().getAnnotation(SchemaProperties.class);
    if (props != null && props.value().length > 0) {
        for (SchemaProperty prop : props.value()) {
            propList.put(prop.name(), prop);
        }
    }
    SchemaProperty singleProp = a.getRawClass().getAnnotation(SchemaProperty.class);
    if (singleProp != null) {
        propList.put(singleProp.name(), singleProp);
    }
    props = AnnotationsUtils.getAnnotation(SchemaProperties.class, annotations);
    if (props != null && props.value().length > 0) {
        for (SchemaProperty prop : props.value()) {
            propList.put(prop.name(), prop);
        }
    }
    singleProp = AnnotationsUtils.getAnnotation(SchemaProperty.class, annotations);
    if (singleProp != null) {
        propList.put(singleProp.name(), singleProp);
    }
    if (propList.isEmpty()) {
        return null;
    }
    Map<String, Schema> schemaProperties = new LinkedHashMap<>();
    for (SchemaProperty prop : propList.values()) {
        String key = prop.name();
        if (StringUtils.isBlank(key)) {
            continue;
        }
        Annotation[] propAnnotations = new Annotation[] { prop.schema(), prop.array() };
        AnnotatedType propType = new AnnotatedType().type(String.class).ctxAnnotations(propAnnotations).resolveAsRef(true);
        Schema resolvedPropSchema = context.resolve(propType);
        if (resolvedPropSchema != null) {
            schemaProperties.put(key, resolvedPropSchema);
        }
    }
    return schemaProperties;
}
Also used : AnnotatedType(io.swagger.v3.core.converter.AnnotatedType) SchemaProperty(io.swagger.v3.oas.annotations.media.SchemaProperty) UUIDSchema(io.swagger.v3.oas.models.media.UUIDSchema) ComposedSchema(io.swagger.v3.oas.models.media.ComposedSchema) IntegerSchema(io.swagger.v3.oas.models.media.IntegerSchema) StringSchema(io.swagger.v3.oas.models.media.StringSchema) ObjectSchema(io.swagger.v3.oas.models.media.ObjectSchema) ArraySchema(io.swagger.v3.oas.models.media.ArraySchema) NumberSchema(io.swagger.v3.oas.models.media.NumberSchema) Schema(io.swagger.v3.oas.models.media.Schema) MapSchema(io.swagger.v3.oas.models.media.MapSchema) Annotation(java.lang.annotation.Annotation) LinkedHashMap(java.util.LinkedHashMap) SchemaProperties(io.swagger.v3.oas.annotations.media.SchemaProperties)

Example 27 with AnnotatedType

use of io.swagger.v3.core.converter.AnnotatedType in project swagger-core by swagger-api.

the class ModelConverters method read.

public Map<String, Schema> read(AnnotatedType type) {
    Map<String, Schema> modelMap = new HashMap<>();
    if (shouldProcess(type.getType())) {
        ModelConverterContextImpl context = new ModelConverterContextImpl(converters);
        Schema resolve = context.resolve(type);
        for (Entry<String, Schema> entry : context.getDefinedModels().entrySet()) {
            if (entry.getValue().equals(resolve)) {
                modelMap.put(entry.getKey(), entry.getValue());
            }
        }
    }
    return modelMap;
}
Also used : HashMap(java.util.HashMap) Schema(io.swagger.v3.oas.models.media.Schema)

Example 28 with AnnotatedType

use of io.swagger.v3.core.converter.AnnotatedType in project swagger-core by swagger-api.

the class ModelConverterContextImpl method resolve.

@Override
public Schema resolve(AnnotatedType type) {
    AnnotatedType aType = OptionalUtils.unwrapOptional(type);
    if (aType != null) {
        return resolve(aType);
    }
    if (processedTypes.contains(type)) {
        return modelByType.get(type);
    } else {
        processedTypes.add(type);
    }
    if (LOGGER.isDebugEnabled()) {
        LOGGER.debug(String.format("resolve %s", type.getType()));
    }
    Iterator<ModelConverter> converters = this.getConverters();
    Schema resolved = null;
    if (converters.hasNext()) {
        ModelConverter converter = converters.next();
        LOGGER.trace("trying extension {}", converter);
        resolved = converter.resolve(type, this, converters);
    }
    if (resolved != null) {
        modelByType.put(type, resolved);
        Schema resolvedImpl = resolved;
        if (resolvedImpl.getName() != null) {
            modelByName.put(resolvedImpl.getName(), resolved);
        }
    } else {
        processedTypes.remove(type);
    }
    return resolved;
}
Also used : Schema(io.swagger.v3.oas.models.media.Schema)

Example 29 with AnnotatedType

use of io.swagger.v3.core.converter.AnnotatedType in project swagger-core by swagger-api.

the class ReaderTest method resolveJaxb.

private Map<String, Schema> resolveJaxb(Type type) {
    List<ModelConverter> converters = new CopyOnWriteArrayList<ModelConverter>();
    ObjectMapper mapper = JaxbObjectMapperFactory.getMapper();
    converters.add(new ModelResolver(mapper));
    ModelConverterContextImpl context = new ModelConverterContextImpl(converters);
    Schema resolve = context.resolve(new AnnotatedType().type(type));
    Map<String, Schema> schemas = new HashMap<String, Schema>();
    for (Map.Entry<String, Schema> entry : context.getDefinedModels().entrySet()) {
        if (entry.getValue().equals(resolve)) {
            schemas.put(entry.getKey(), entry.getValue());
        }
    }
    return schemas;
}
Also used : HashMap(java.util.HashMap) IntegerSchema(io.swagger.v3.oas.models.media.IntegerSchema) ArraySchema(io.swagger.v3.oas.models.media.ArraySchema) Schema(io.swagger.v3.oas.models.media.Schema) ModelConverter(io.swagger.v3.core.converter.ModelConverter) ModelResolver(io.swagger.v3.core.jackson.ModelResolver) AnnotatedType(io.swagger.v3.core.converter.AnnotatedType) Map(java.util.Map) HashMap(java.util.HashMap) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) ModelConverterContextImpl(io.swagger.v3.core.converter.ModelConverterContextImpl) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList)

Example 30 with AnnotatedType

use of io.swagger.v3.core.converter.AnnotatedType in project swagger-core by swagger-api.

the class PatternAndSchemaPropertiesTest method testSinglePatternAndSchemaProperties.

@Test
public void testSinglePatternAndSchemaProperties() throws Exception {
    final ModelResolver modelResolver = new ModelResolver(mapper());
    ModelConverterContextImpl context = new ModelConverterContextImpl(modelResolver);
    Schema model = context.resolve(new AnnotatedType(AnnotatedPetSinglePatternProperty.class));
    assertEquals(((Schema) model.getPatternProperties().get("what.*ever")).getFormat(), "int32");
    assertEquals(((Schema) model.getProperties().get("anotherCategory")).get$ref(), "#/components/schemas/Category");
}
Also used : AnnotatedType(io.swagger.v3.core.converter.AnnotatedType) OpenAPISchema2JsonSchema(io.swagger.v3.core.util.OpenAPISchema2JsonSchema) Schema(io.swagger.v3.oas.models.media.Schema) AnnotatedPetSinglePatternProperty(io.swagger.v3.core.resolving.v31.model.AnnotatedPetSinglePatternProperty) ModelConverterContextImpl(io.swagger.v3.core.converter.ModelConverterContextImpl) ModelResolver(io.swagger.v3.core.jackson.ModelResolver) Test(org.testng.annotations.Test)

Aggregations

Schema (io.swagger.v3.oas.models.media.Schema)60 AnnotatedType (io.swagger.v3.core.converter.AnnotatedType)57 Test (org.testng.annotations.Test)47 ModelConverterContextImpl (io.swagger.v3.core.converter.ModelConverterContextImpl)25 ModelResolver (io.swagger.v3.core.jackson.ModelResolver)21 ArraySchema (io.swagger.v3.oas.models.media.ArraySchema)14 ComposedSchema (io.swagger.v3.oas.models.media.ComposedSchema)13 AfterTest (org.testng.annotations.AfterTest)13 StringSchema (io.swagger.v3.oas.models.media.StringSchema)11 ModelConverter (io.swagger.v3.core.converter.ModelConverter)6 IntegerSchema (io.swagger.v3.oas.models.media.IntegerSchema)6 ObjectSchema (io.swagger.v3.oas.models.media.ObjectSchema)6 Annotation (java.lang.annotation.Annotation)6 LinkedHashMap (java.util.LinkedHashMap)5 Map (java.util.Map)5 JavaType (com.fasterxml.jackson.databind.JavaType)4 MapSchema (io.swagger.v3.oas.models.media.MapSchema)4 NumberSchema (io.swagger.v3.oas.models.media.NumberSchema)4 UUIDSchema (io.swagger.v3.oas.models.media.UUIDSchema)4 ArrayList (java.util.ArrayList)4