Search in sources :

Example 1 with PropertyDescriptor

use of org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor in project incubator-servicecomb-java-chassis by apache.

the class SchemaManager method createMapFields.

public FieldMapEx<Map<Object, Object>> createMapFields(Message message, Map<String, Type> types) {
    List<FieldSchema<Map<Object, Object>>> fieldSchemas = new ArrayList<>();
    for (Field protoField : message.getFields()) {
        PropertyDescriptor propertyDescriptor = new PropertyDescriptor();
        JavaType javaType = getParameterType(types, protoField.getName());
        if (javaType.isPrimitive()) {
            javaType = TypeFactory.defaultInstance().constructType(ClassUtils.primitiveToWrapper(javaType.getRawClass()));
        }
        propertyDescriptor.setJavaType(javaType);
        propertyDescriptor.setGetter(new MapGetter<>(protoField.getName()));
        propertyDescriptor.setSetter(new MapSetter<>(protoField.getName()));
        FieldSchema<Map<Object, Object>> fieldSchema = createSchemaField(protoField, propertyDescriptor);
        fieldSchemas.add(fieldSchema);
    }
    return FieldMapEx.createFieldMap(fieldSchemas);
}
Also used : Field(io.protostuff.compiler.model.Field) ProtoUtils.isAnyField(org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils.isAnyField) JavaType(com.fasterxml.jackson.databind.JavaType) PropertyDescriptor(org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor) FieldSchema(io.protostuff.runtime.FieldSchema) ArrayList(java.util.ArrayList) Map(java.util.Map)

Example 2 with PropertyDescriptor

use of org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor in project incubator-servicecomb-java-chassis by apache.

the class SchemaManager method createMapFields.

// normal message write from or read to a map
public FieldMapEx<Map<Object, Object>> createMapFields(Message message) {
    List<FieldSchema<Map<Object, Object>>> fieldSchemas = new ArrayList<>();
    for (Field protoField : message.getFields()) {
        PropertyDescriptor propertyDescriptor = new PropertyDescriptor();
        propertyDescriptor.setJavaType(ProtoConst.OBJECT_TYPE);
        propertyDescriptor.setGetter(new MapGetter<>(protoField.getName()));
        propertyDescriptor.setSetter(new MapSetter<>(protoField.getName()));
        FieldSchema<Map<Object, Object>> fieldSchema = createSchemaField(protoField, propertyDescriptor);
        fieldSchemas.add(fieldSchema);
    }
    return FieldMapEx.createFieldMap(fieldSchemas);
}
Also used : Field(io.protostuff.compiler.model.Field) ProtoUtils.isAnyField(org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils.isAnyField) PropertyDescriptor(org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor) FieldSchema(io.protostuff.runtime.FieldSchema) ArrayList(java.util.ArrayList) Map(java.util.Map)

Example 3 with PropertyDescriptor

use of org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor in project incubator-servicecomb-java-chassis by apache.

the class MessageReadSchema method createFieldMap.

private void createFieldMap() {
    DeserializerSchemaManager deserializerSchemaManager = protoMapper.getDeserializerSchemaManager();
    BeanDescriptor beanDescriptor = protoMapper.getBeanDescriptorManager().getOrCreateBeanDescriptor(javaType);
    List<FieldSchema<T>> fieldSchemas = new ArrayList<>();
    for (PropertyDescriptor propertyDescriptor : beanDescriptor.getPropertyDescriptors().values()) {
        Field protoField = message.getField(propertyDescriptor.getName());
        if (protoField == null) {
            LOGGER.info("java field {}:{} not exist in proto message {}, ignore it.", beanDescriptor.getJavaType().getRawClass().getName(), propertyDescriptor.getName(), message.getCanonicalName());
            continue;
        }
        if (propertyDescriptor.getSetter() == null) {
            LOGGER.info("no setter for java field {}:{} in proto message {}, ignore it.", beanDescriptor.getJavaType().getRawClass().getName(), propertyDescriptor.getName(), message.getCanonicalName());
            continue;
        }
        FieldSchema<T> fieldSchema = deserializerSchemaManager.createSchemaField(protoField, propertyDescriptor);
        fieldSchemas.add(fieldSchema);
    }
    this.fieldMap = FieldMapEx.createFieldMap(fieldSchemas);
}
Also used : Field(io.protostuff.compiler.model.Field) PropertyDescriptor(org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor) BeanDescriptor(org.apache.servicecomb.foundation.protobuf.internal.bean.BeanDescriptor) FieldSchema(io.protostuff.runtime.FieldSchema) ArrayList(java.util.ArrayList)

Example 4 with PropertyDescriptor

use of org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor in project incubator-servicecomb-java-chassis by apache.

the class MessageWriteSchema method createPojoFields.

private FieldMapEx<T> createPojoFields(Type type) {
    SerializerSchemaManager serializerSchemaManager = protoMapper.getSerializerSchemaManager();
    BeanDescriptor beanDescriptor = protoMapper.getBeanDescriptorManager().getOrCreateBeanDescriptor(type);
    List<FieldSchema<T>> fieldSchemas = new ArrayList<>();
    for (Field protoField : message.getFields()) {
        PropertyDescriptor propertyDescriptor = beanDescriptor.getPropertyDescriptors().get(protoField.getName());
        if (propertyDescriptor == null) {
            continue;
        }
        Object getter = propertyDescriptor.getGetter();
        if (getter == null) {
            continue;
        }
        FieldSchema<T> fieldSchema = serializerSchemaManager.createSchemaField(protoField, propertyDescriptor);
        fieldSchemas.add(fieldSchema);
    }
    return FieldMapEx.createFieldMap(fieldSchemas);
}
Also used : Field(io.protostuff.compiler.model.Field) PropertyDescriptor(org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor) BeanDescriptor(org.apache.servicecomb.foundation.protobuf.internal.bean.BeanDescriptor) FieldSchema(io.protostuff.runtime.FieldSchema) ArrayList(java.util.ArrayList)

Example 5 with PropertyDescriptor

use of org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor in project java-chassis by ServiceComb.

the class MessageReadSchema method createFieldMap.

private void createFieldMap() {
    DeserializerSchemaManager deserializerSchemaManager = protoMapper.getDeserializerSchemaManager();
    BeanDescriptor beanDescriptor = protoMapper.getBeanDescriptorManager().getOrCreateBeanDescriptor(javaType);
    List<FieldSchema<T>> fieldSchemas = new ArrayList<>();
    for (PropertyDescriptor propertyDescriptor : beanDescriptor.getPropertyDescriptors().values()) {
        Field protoField = message.getField(propertyDescriptor.getName());
        if (protoField == null) {
            LOGGER.info("java field {}:{} not exist in proto message {}, ignore it.", beanDescriptor.getJavaType().getRawClass().getName(), propertyDescriptor.getName(), message.getCanonicalName());
            continue;
        }
        if (propertyDescriptor.getSetter() == null) {
            LOGGER.info("no setter for java field {}:{} in proto message {}, ignore it.", beanDescriptor.getJavaType().getRawClass().getName(), propertyDescriptor.getName(), message.getCanonicalName());
            continue;
        }
        FieldSchema<T> fieldSchema = deserializerSchemaManager.createSchemaField(protoField, propertyDescriptor);
        fieldSchemas.add(fieldSchema);
    }
    this.fieldMap = FieldMapEx.createFieldMap(fieldSchemas);
}
Also used : Field(io.protostuff.compiler.model.Field) PropertyDescriptor(org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor) BeanDescriptor(org.apache.servicecomb.foundation.protobuf.internal.bean.BeanDescriptor) FieldSchema(io.protostuff.runtime.FieldSchema) ArrayList(java.util.ArrayList)

Aggregations

Field (io.protostuff.compiler.model.Field)10 PropertyDescriptor (org.apache.servicecomb.foundation.protobuf.internal.bean.PropertyDescriptor)10 FieldSchema (io.protostuff.runtime.FieldSchema)8 ArrayList (java.util.ArrayList)8 Map (java.util.Map)4 ProtoUtils.isAnyField (org.apache.servicecomb.foundation.protobuf.internal.ProtoUtils.isAnyField)4 BeanDescriptor (org.apache.servicecomb.foundation.protobuf.internal.bean.BeanDescriptor)4 JavaType (com.fasterxml.jackson.databind.JavaType)2