avro-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tim Robertson <timrobertson...@gmail.com>
Subject Are optional fields possible?
Date Tue, 03 Aug 2010 10:07:19 GMT
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

Mime
View raw message