Skip to content

Instantly share code, notes, and snippets.

@jghoman
Created March 11, 2016 20:08
Show Gist options
  • Save jghoman/9641b0f9e3218c195801 to your computer and use it in GitHub Desktop.
Save jghoman/9641b0f9e3218c195801 to your computer and use it in GitHub Desktop.
Avro Reflection example...
public static class DifferentUser {
private String name;
private int favoriteNumber;
private String favoriteColor;
public DifferentUser() {}
public DifferentUser(String favoriteColor, int favoriteNumber, String name) {
this.favoriteColor = favoriteColor;
this.favoriteNumber = favoriteNumber;
this.name = name;
}
public String getFavoriteColor() {
return favoriteColor;
}
public void setFavoriteColor(String favoriteColor) {
this.favoriteColor = favoriteColor;
}
public int getFavoriteNumber() {
return favoriteNumber;
}
public void setFavoriteNumber(int favoriteNumber) {
this.favoriteNumber = favoriteNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Test
public void TestReflection() throws IOException {
Schema schema = ReflectData.get().getSchema(DifferentUser.class);
System.out.println("schema = " + schema.toString(true));
GenericRecord gr = new GenericRecordBuilder(schema)
.set("name", "joe")
.set("favoriteNumber", 42)
.set("favoriteColor", "blue")
.build();
GenericDatumWriter<GenericRecord> gdw = new GenericDatumWriter<>(schema);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Encoder encoder = EncoderFactory.get().binaryEncoder(baos, null);
gdw.write(gr, encoder);
encoder.flush();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
Decoder decoder = DecoderFactory.get().binaryDecoder(bais, null);
ReflectDatumReader<DifferentUser> rdr = new ReflectDatumReader<>(DifferentUser.class);
DifferentUser differentUser = rdr.read(null, decoder);
assertEquals("joe", differentUser.getName());
assertEquals(42, differentUser.getFavoriteNumber());
assertEquals("blue", differentUser.getFavoriteColor());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment