Beispiel #1
0
 private final Map.Entry<DataSchema, Schema> findUnionMemberSchema(
     Object value, UnionDataSchema unionDataSchema, Schema avroSchema) {
   int index = _genericData.resolveUnion(avroSchema, value);
   Schema memberAvroSchema = avroSchema.getTypes().get(index);
   String key;
   switch (memberAvroSchema.getType()) {
     case ENUM:
     case FIXED:
     case RECORD:
       key = memberAvroSchema.getFullName();
       break;
     default:
       key = memberAvroSchema.getType().toString().toLowerCase();
   }
   DataSchema memberDataSchema = unionDataSchema.getType(key);
   if (memberDataSchema == null) {
     for (DataSchema dataSchema : unionDataSchema.getTypes()) {
       AvroOverride avroOverride = getAvroOverride(dataSchema);
       if (avroOverride != null) {
         if (avroOverride.getAvroSchemaFullName().equals(key)) {
           memberDataSchema = dataSchema;
           break;
         }
       }
     }
   }
   if (memberDataSchema == null) {
     appendMessage("cannot find %1$s in union %2$s for value %3$s", key, unionDataSchema, value);
     return null;
   }
   return new AbstractMap.SimpleEntry<DataSchema, Schema>(memberDataSchema, memberAvroSchema);
 }
Beispiel #2
0
 protected Map.Entry<String, Schema> findUnionMember(DataSchema dataSchema, Schema avroSchema) {
   AvroOverride avroOverride = getAvroOverride(dataSchema);
   String key =
       (avroOverride == null
           ? dataSchema.getUnionMemberKey()
           : avroOverride.getAvroSchemaFullName());
   List<Schema> members = avroSchema.getTypes();
   for (Schema member : members) {
     String name;
     switch (member.getType()) {
       case ENUM:
       case FIXED:
       case RECORD:
         name = member.getFullName();
         break;
       default:
         name = member.getType().toString().toLowerCase();
     }
     if (name.equals(key)) return new AbstractMap.SimpleEntry<String, Schema>(name, member);
   }
   appendMessage("cannot find %1$s in union %2$s", key, avroSchema);
   return null;
 }