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