Skip to content

Instantly share code, notes, and snippets.

@mulloymorrow
Created March 11, 2016 22:11
Show Gist options
  • Save mulloymorrow/2ada4f6fecfc98379f21 to your computer and use it in GitHub Desktop.
Save mulloymorrow/2ada4f6fecfc98379f21 to your computer and use it in GitHub Desktop.
import org.apache.avro.Schema;
import org.apache.avro.generic.GenericDatumWriter;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.generic.GenericRecordBuilder;
import org.apache.avro.io.Decoder;
import org.apache.avro.io.DecoderFactory;
import org.apache.avro.io.Encoder;
import org.apache.avro.io.EncoderFactory;
import org.apache.avro.reflect.Nullable;
import org.apache.avro.reflect.ReflectData;
import org.apache.avro.reflect.ReflectDatumReader;
import org.junit.Test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import static org.junit.Assert.assertEquals;
public class ReflectionTest {
public static class DifferentUser {
@Nullable
private String name;
@Nullable
private int favoriteNumber;
@Nullable
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