【发布时间】:2014-11-26 23:05:27
【问题描述】:
我正在尝试从 Java 类层次结构创建一个 avro 模式。 在深入了解完整结构之前,我尝试为一个简单的 java 类生成 Avro 模式,如下所示
package TestAvroTools;
import java.util.ArrayList;
public class InduceSchemaIPClass {
private int inta;
private String stringb;
private ArrayList<String> a = null;
private boolean booleana;
private static class InnerKlass{
int innerKlassInta;
}
}
Avro InduceScehmaTool (org.apache.avro.tool) (avro v1.7.7) (jdk 1.6) 跳过静态类成员 InnerKclass。 输出如下:
{
"type" : "record",
"name" : "InduceSchemaIPClass",
"namespace" : "test.avro.ip",
"fields" : [ {
"name" : "inta",
"type" : "int"
}, {
"name" : "stringb",
"type" : "string"
}, {
"name" : "a",
"type" : {
"type" : "array",
"items" : "string",
"java-class" : "java.util.ArrayList"
}
}, {
"name" : "booleana",
"type" : "boolean"
} ]
}
我调试了代码以找到在 ReflectData 的 getFields() (org.apache.avro.reflect) 中跳过这个的语句
for (Field field : c.getDeclaredFields())
if ((field.getModifiers() & (Modifier.TRANSIENT|Modifier.STATIC)) == 0)
这样做有什么原因吗?我需要静态成员成为 Avro 生成架构的一部分。
【问题讨论】:
标签: java reflection schema avro