You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Doug Cutting (JIRA)" <ji...@apache.org> on 2012/05/22 01:12:40 UTC
[jira] [Assigned] (AVRO-1066) ArrayIndexOutOfBoundsException in
ParsingEncoder when trying to use a json encoder to serialize a deep object
graph
[ https://issues.apache.org/jira/browse/AVRO-1066?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Doug Cutting reassigned AVRO-1066:
----------------------------------
Assignee: Daniel Lord (was: Thiruvalluvan M. G.)
> ArrayIndexOutOfBoundsException in ParsingEncoder when trying to use a json encoder to serialize a deep object graph
> -------------------------------------------------------------------------------------------------------------------
>
> Key: AVRO-1066
> URL: https://issues.apache.org/jira/browse/AVRO-1066
> Project: Avro
> Issue Type: Bug
> Affects Versions: 1.6.3
> Reporter: Daniel Lord
> Assignee: Daniel Lord
> Fix For: 1.7.0
>
> Attachments: AVRO-1066-2.patch, AVRO-1066.patch
>
>
> I have an avro record that can have an array of children records of the same type. If this structure gets to be too deep then I continually get an ArrayOutOfBoundsException in ParsingEncoder when trying to use a json encoder. This works fine when using a binary encoder. My schema looks something like this:
> {
> "name" : "MyRecord",
> "type" : "record",
> "fields" : [
> {
> "name" : "fooField",
> "type" : "int"
> },
> {
> "name" : "childRecords",
> "type" : [ "null", { "type" : "array", "items" : "MyRecord" } ]
> }
> ]
> }
> The code I'm using to capture a JSON string for debugging looks like this:
> ByteArrayOutputStream os = null;
> try {
> os = new ByteArrayOutputStream(2048);
> final Encoder jsonEncoder = EncoderFactory.get().jsonEncoder(MyRecord.SCHEMA$, os);
> final DatumWriter<MyRecord> datumWriter = new SpecificDatumWriter<MyRecord>(MyRecord.class);
> datumWriter.write(record, jsonEncoder);
> jsonEncoder.flush();
> return new String(os.toByteArray(), Charset.defaultCharset());
> } catch (IOException e) {
> return null;
> } finally {
> if (os != null) {
> try {
> os.close();
> } catch (IOException e) {
> }
> }
> }
> The error I get looks like this:
> java.lang.ArrayIndexOutOfBoundsException: 10
> at org.apache.avro.io.ParsingEncoder.push(ParsingEncoder.java:55)
> at org.apache.avro.io.JsonEncoder.writeArrayStart(JsonEncoder.java:231)
> at org.apache.avro.generic.GenericDatumWriter.writeArray(GenericDatumWriter.java:125)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:67)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:72)
> at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:105)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:65)
> at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:105)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:65)
> at org.apache.avro.generic.GenericDatumWriter.writeArray(GenericDatumWriter.java:129)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:67)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:72)
> at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:105)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:65)
> at org.apache.avro.generic.GenericDatumWriter.writeArray(GenericDatumWriter.java:129)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:67)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:72)
> at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:105)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:65)
> at org.apache.avro.generic.GenericDatumWriter.writeArray(GenericDatumWriter.java:129)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:67)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:72)
> at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:105)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:65)
> at org.apache.avro.generic.GenericDatumWriter.writeArray(GenericDatumWriter.java:129)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:67)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:72)
> at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:105)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:65)
> at org.apache.avro.generic.GenericDatumWriter.writeArray(GenericDatumWriter.java:129)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:67)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:72)
> at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:105)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:65)
> at org.apache.avro.generic.GenericDatumWriter.writeArray(GenericDatumWriter.java:129)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:67)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:72)
> at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:105)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:65)
> at org.apache.avro.generic.GenericDatumWriter.writeArray(GenericDatumWriter.java:129)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:67)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:72)
> at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:105)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:65)
> at org.apache.avro.generic.GenericDatumWriter.writeArray(GenericDatumWriter.java:129)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:67)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:72)
> at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:105)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:65)
> at org.apache.avro.generic.GenericDatumWriter.writeArray(GenericDatumWriter.java:129)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:67)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:72)
> at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:105)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:65)
> at org.apache.avro.generic.GenericDatumWriter.writeArray(GenericDatumWriter.java:129)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:67)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:72)
> at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:105)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:65)
> at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:57)
> <my line calling datumWriter.write>
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira