Search in sources :

Example 6 with BeanPropertyDefinition

use of com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition in project swagger-core by swagger-api.

the class ModelResolver method resolveAccessMode.

protected io.swagger.v3.oas.annotations.media.Schema.AccessMode resolveAccessMode(BeanPropertyDefinition propDef, JavaType type, io.swagger.v3.oas.annotations.media.Schema schema) {
    if (schema != null && !schema.accessMode().equals(io.swagger.v3.oas.annotations.media.Schema.AccessMode.AUTO)) {
        return schema.accessMode();
    } else if (schema != null && schema.readOnly()) {
        return io.swagger.v3.oas.annotations.media.Schema.AccessMode.READ_ONLY;
    } else if (schema != null && schema.writeOnly()) {
        return io.swagger.v3.oas.annotations.media.Schema.AccessMode.WRITE_ONLY;
    }
    if (propDef == null) {
        return null;
    }
    JsonProperty.Access access = null;
    if (propDef instanceof POJOPropertyBuilder) {
        access = ((POJOPropertyBuilder) propDef).findAccess();
    }
    boolean hasGetter = propDef.hasGetter();
    boolean hasSetter = propDef.hasSetter();
    boolean hasConstructorParameter = propDef.hasConstructorParameter();
    boolean hasField = propDef.hasField();
    if (access == null) {
        final BeanDescription beanDesc = _mapper.getDeserializationConfig().introspect(type);
        List<BeanPropertyDefinition> properties = beanDesc.findProperties();
        for (BeanPropertyDefinition prop : properties) {
            if (StringUtils.isNotBlank(prop.getInternalName()) && prop.getInternalName().equals(propDef.getInternalName())) {
                if (prop instanceof POJOPropertyBuilder) {
                    access = ((POJOPropertyBuilder) prop).findAccess();
                }
                hasGetter = hasGetter || prop.hasGetter();
                hasSetter = hasSetter || prop.hasSetter();
                hasConstructorParameter = hasConstructorParameter || prop.hasConstructorParameter();
                hasField = hasField || prop.hasField();
                break;
            }
        }
    }
    if (access == null) {
        if (!hasGetter && !hasField && (hasConstructorParameter || hasSetter)) {
            return io.swagger.v3.oas.annotations.media.Schema.AccessMode.WRITE_ONLY;
        }
        return null;
    } else {
        switch(access) {
            case AUTO:
                return io.swagger.v3.oas.annotations.media.Schema.AccessMode.AUTO;
            case READ_ONLY:
                return io.swagger.v3.oas.annotations.media.Schema.AccessMode.READ_ONLY;
            case READ_WRITE:
                return io.swagger.v3.oas.annotations.media.Schema.AccessMode.READ_WRITE;
            case WRITE_ONLY:
                return io.swagger.v3.oas.annotations.media.Schema.AccessMode.WRITE_ONLY;
            default:
                return io.swagger.v3.oas.annotations.media.Schema.AccessMode.AUTO;
        }
    }
}
Also used : JsonProperty(com.fasterxml.jackson.annotation.JsonProperty) BeanDescription(com.fasterxml.jackson.databind.BeanDescription) POJOPropertyBuilder(com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder) BeanPropertyDefinition(com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition)

Example 7 with BeanPropertyDefinition

use of com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition in project java-chassis by ServiceComb.

the class JacksonPropertyNodeNameProvider method getJavaBeanPropertyName.

private String getJavaBeanPropertyName(JavaBeanProperty property) {
    ObjectMapper objectMapper = DatabindCodec.mapper();
    JavaType type = objectMapper.constructType(property.getDeclaringClass());
    BeanDescription desc = objectMapper.getSerializationConfig().introspect(type);
    return desc.findProperties().stream().filter(prop -> prop.getInternalName().equals(property.getName())).map(BeanPropertyDefinition::getName).findFirst().orElse(property.getName());
}
Also used : Property(org.hibernate.validator.spi.nodenameprovider.Property) DatabindCodec(io.vertx.core.json.jackson.DatabindCodec) PropertyNodeNameProvider(org.hibernate.validator.spi.nodenameprovider.PropertyNodeNameProvider) JavaBeanProperty(org.hibernate.validator.spi.nodenameprovider.JavaBeanProperty) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) BeanDescription(com.fasterxml.jackson.databind.BeanDescription) JavaType(com.fasterxml.jackson.databind.JavaType) BeanPropertyDefinition(com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition) JavaType(com.fasterxml.jackson.databind.JavaType) BeanDescription(com.fasterxml.jackson.databind.BeanDescription) BeanPropertyDefinition(com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper)

Example 8 with BeanPropertyDefinition

use of com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition in project java-chassis by ServiceComb.

the class ConfigObjectFactory method createProperties.

public List<ConfigObjectProperty> createProperties(Object instance, String prefix, Map<String, Object> parameters) {
    List<ConfigObjectProperty> properties = new ArrayList<>();
    JavaType javaType = TypeFactory.defaultInstance().constructType(instance.getClass());
    BeanDescription beanDescription = JsonUtils.OBJ_MAPPER.getSerializationConfig().introspect(javaType);
    for (BeanPropertyDefinition propertyDefinition : beanDescription.findProperties()) {
        if (propertyDefinition.getField() == null) {
            continue;
        }
        if (propertyDefinition.getSetter() == null && !propertyDefinition.getField().isPublic()) {
            continue;
        }
        Setter<Object, Object> setter = createObjectSetter(propertyDefinition);
        PriorityProperty<?> priorityProperty = createPriorityProperty(propertyDefinition.getField().getAnnotated(), prefix, parameters);
        setter.set(instance, priorityProperty.getValue());
        properties.add(new ConfigObjectProperty(setter, priorityProperty));
    }
    return properties;
}
Also used : JavaType(com.fasterxml.jackson.databind.JavaType) BeanDescription(com.fasterxml.jackson.databind.BeanDescription) ArrayList(java.util.ArrayList) BeanPropertyDefinition(com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition)

Example 9 with BeanPropertyDefinition

use of com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition in project java-chassis by ServiceComb.

the class BeanDescriptor method init.

public void init(SerializationConfig serializationConfig, JavaType javaType) {
    this.javaType = javaType;
    BeanDescription beanDescription = serializationConfig.introspect(javaType);
    for (BeanPropertyDefinition propertyDefinition : beanDescription.findProperties()) {
        PropertyDescriptor propertyDescriptor = new PropertyDescriptor();
        propertyDescriptor.setName(propertyDefinition.getName());
        propertyDescriptor.setJavaType(propertyDefinition.getPrimaryType());
        try {
            propertyDescriptor.setGetter(initGetter(propertyDefinition));
        } catch (Throwable e) {
            LOGGER.error("failed to init getter for field {}:{}", javaType.getRawClass().getName(), propertyDefinition.getName(), e);
        }
        try {
            propertyDescriptor.setSetter(initSetter(propertyDefinition));
        } catch (Throwable e) {
            LOGGER.error("failed to init setter for field {}:{}", javaType.getRawClass().getName(), propertyDefinition.getName(), e);
        }
        propertyDescriptors.put(propertyDefinition.getName(), propertyDescriptor);
    }
}
Also used : BeanDescription(com.fasterxml.jackson.databind.BeanDescription) BeanPropertyDefinition(com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition)

Example 10 with BeanPropertyDefinition

use of com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition 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)

Aggregations

BeanPropertyDefinition (com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition)32 BeanDescription (com.fasterxml.jackson.databind.BeanDescription)24 JavaType (com.fasterxml.jackson.databind.JavaType)21 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)10 ArrayList (java.util.ArrayList)10 Annotation (java.lang.annotation.Annotation)8 Type (java.lang.reflect.Type)6 HashSet (java.util.HashSet)6 JsonProperty (com.fasterxml.jackson.annotation.JsonProperty)5 AnnotatedMethod (com.fasterxml.jackson.databind.introspect.AnnotatedMethod)5 HashMap (java.util.HashMap)4 Map (java.util.Map)4 JsonIgnoreProperties (com.fasterxml.jackson.annotation.JsonIgnoreProperties)3 JsonTypeInfo (com.fasterxml.jackson.annotation.JsonTypeInfo)3 SerializationConfig (com.fasterxml.jackson.databind.SerializationConfig)3 AnnotatedField (com.fasterxml.jackson.databind.introspect.AnnotatedField)3 AnnotatedMember (com.fasterxml.jackson.databind.introspect.AnnotatedMember)3 POJOPropertyBuilder (com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder)3 SuppressFBWarnings (edu.umd.cs.findbugs.annotations.SuppressFBWarnings)3 JsonIdentityInfo (com.fasterxml.jackson.annotation.JsonIdentityInfo)2