I'm writing a schema for a java class that has an enum field. I'm using the java schema builder like this:
public Schema schema = SchemaBuilder
.record("MyRecord").namespace("my.name.space")
.name("myEnum").type().enumeration("MyEnumClass").namespace("enum.name.space")
.symbols("S1", ..., "S1000").noDefault()
.endRecord()
The problem is that there are hundreds of Enum values in MyEnumClass. The class is accessible from my code. How can I insert them dynamically into .symbles()
without manually typing them?
You can create avro schema for your class automatically.
For example.
Enum:
public enum TestEnum {
VAL1,
VAL2,
VAL3
}
Class with enum field:
public class TestClass {
public TestEnum testEnum;
public TestClass() {
}
public TestClass(TestEnum testEnum) {
this.testEnum = testEnum;
}
public TestEnum getTestEnum() {
return testEnum;
}
public void setTestEnum(TestEnum testEnum) {
this.testEnum = testEnum;
}
}
Generating schema:
Schema schema = ReflectData.get().getSchema(TestClass.class);
Result:
{
"type": "record",
"name": "TestClass",
"namespace": "q42698247",
"fields": [
{
"name": "testEnum",
"type": {
"type": "enum",
"name": "TestEnum",
"symbols": [
"VAL1",
"VAL2",
"VAL3"
]
}
}
]
}