NamedSchemaParser.java 文件源码

java
阅读 36 收藏 0 点赞 0 评论 0

项目:shapeshifter 作者:
/**
 * {@inheritDoc}
 *
 * This variation allows for the inclusion of schemas for serializing
 * sub-objects that may appear in {@code message}. If no suitable schema
 * is found in the registry, a schema with default settings is generated
 * on the fly using {@link
 * SchemaSource#get(com.google.protobuf.Descriptors.Descriptor)}.
 *
 */
public Message parse(JsonNode node, ReadableSchemaRegistry registry) throws ParsingException {
    Message.Builder builder = DynamicMessage.newBuilder(schema.getDescriptor());

    for (Map.Entry<String, FieldDescriptor> fieldEntry : schema.getFields().entrySet()) {
        String fieldName = schema.getPropertyName(fieldEntry.getKey());
        FieldDescriptor field = fieldEntry.getValue();
        if (node.has(fieldName) && !node.get(fieldName).isNull()) {
            JsonNode valueNode = node.get(fieldName);
            if (field.isRepeated()) {
                if (schema.getMappings().containsKey(field.getName())) {
                    parseMappedField(registry, builder, fieldName, field, valueNode);
                } else {
                    parseRepeatedField(registry, builder, fieldName, field, valueNode);
                }
            } else {
                Object value = parseValue(valueNode, field, registry);
                if (value != null) {
                    builder.setField(field, value);
                }
            }
        }
    }

    return builder.build();
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号