Hi all,
Is it possible in the schema to indicate that a filed is optional?
I have things like:
{"name": "userId", "type": "string", "default": null},
{
"name": "level",
"type":
{
"name": "LEVEL_TYPES",
"type": "enum",
"symbols" : ["DEBUG", "INFO", "WARN", "ERROR"]
},
"default": 0
},
and Java serliazation code:
HttpTransceiver client = new HttpTransceiver(server);
LogEvent proxy = (LogEvent)
SpecificRequestor.getClient(LogEvent.class, client);
Event e = new Event();
e.level=LEVEL_TYPES.DEBUG;
... more setters
proxy.log(e);
but I seem to have to set a value to every field in the schema, or else I get:
Exception in thread "main" java.lang.NullPointerException
at
org.apache.avro.specific.SpecificDatumWriter.writeEnum(SpecificDatumWriter.java:54)
at
org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:63)
at
org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:89)
at
org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:62)
at
org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:55)
at
org.apache.avro.specific.SpecificRequestor.writeRequest(SpecificRequestor.java:69)
at org.apache.avro.ipc.Requestor.request(Requestor.java:109)
at
org.apache.avro.specific.SpecificRequestor.invoke(SpecificRequestor.java:52)
at $Proxy0.log(Unknown Source)
at org.gbif.portalanalytics.client.GBIFLogger.info(GBIFLogger.java:41)
at org.gbif.portalanalytics.client.GBIFLogger.main(GBIFLogger.java:67)
Is it expected to have to have a value on each field?
For Enums this means I would need a NULL in the Enum explicitly I think.
Thanks for any pointers!
Tim