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;
}
}
}
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());
}
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;
}
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);
}
}
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);
}
}
Aggregations