Created
March 11, 2016 22:11
-
-
Save mulloymorrow/2ada4f6fecfc98379f21 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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