You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Thiruvalluvan M. G. (JIRA)" <ji...@apache.org> on 2017/10/11 01:21:00 UTC
[jira] [Assigned] (AVRO-2095) Avro 1.8.2 encode in c++ -
java.lang.ArrayIndexOutOfBoundsException
[ https://issues.apache.org/jira/browse/AVRO-2095?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Thiruvalluvan M. G. reassigned AVRO-2095:
-----------------------------------------
Assignee: Thiruvalluvan M. G.
> Avro 1.8.2 encode in c++ - java.lang.ArrayIndexOutOfBoundsException
> --------------------------------------------------------------------
>
> Key: AVRO-2095
> URL: https://issues.apache.org/jira/browse/AVRO-2095
> Project: Avro
> Issue Type: New Feature
> Components: c++, java
> Affects Versions: 1.8.2
> Environment: C++, Java
> Reporter: Karthik
> Assignee: Thiruvalluvan M. G.
> Labels: newbie
>
> I have the following schema
> {code:json}
> [
> {
> "namespace": "com.test",
> "name": "MyDevice",
> "type": "record",
> "doc": "client device",
> "fields": [
> {
> "name": "deviceId",
> "type": [
> "null",
> "string"
> ],
> "default": null,
> "doc": "Usually unique MAC address"
> }
> ]
> },
> {
> "namespace": "com.test",
> "name": "Event",
> "type": "record",
> "doc": "event",
> "fields": [
> {
> "name": "myDevice",
> "type": [
> "null",
> "com.test.MyDevice"
> ],
> "default": null,
> "doc": "Device information"
> }
> ]
> }
> ]
> {code}
> I installed avro 1.8.2 on my ubuntu build machine and generated test.h using avrogencpp tool.
> Then, I created binary encoded avro data as follows:
> {code:c++}
> MyDevice device;
> device.deviceId.set_string("device1");
> Event event;
> event.myDevice.set_MyDevice(device);
> std::vector<char> bytes;
> std::auto_ptr<avro::OutputStream> out = avro::memoryOutputStream(1);
> avro::EncoderPtr e = avro::binaryEncoder();
> e->init(*out);
> avro::encode(*e, event);
> out->flush();
> {code}
> I deserialize my data in Java application as follows:
> {code:java}
> Schema schema = SchemaUtils.getSchemaFromFile("src/main/resources/schemas/test.avsc");
> DatumReader<GenericRecord> genericDatumReader = new GenericDatumReader<>(schema);
> Decoder decoder = DecoderFactory.get().binaryDecoder(data, null);
> try {
> GenericRecord userData = genericDatumReader.read(null, decoder);
> System.out.println(userData);
> } catch (IOException e) {
> e.printStackTrace();
> }
> {code}
> And the result is
> {noformat}
> java.lang.ArrayIndexOutOfBoundsException: 7
> at org.apache.avro.io.parsing.Symbol$Alternative.getSymbol(Symbol.java:424)
> at org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:290)
> at org.apache.avro.io.parsing.Parser.advance(Parser.java:88)
> at org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:267)
> at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:179)
> at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:153)
> at org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:232)
> at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:222)
> at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:175)
> at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:153)
> at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:179)
> at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:153)
> at org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:232)
> at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:222)
> at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:175)
> at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:153)
> at org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:179)
> at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:153)
> at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:145)
> {noformat}
> But if I do the same using a simple schema (without union), it works perfectly
> {code:json}
> {
> "namespace": "com.test",
> "name": "MyDevice",
> "type": "record",
> "doc": "client device",
> "fields": [
> {
> "name": "deviceId",
> "type": [
> "null",
> "string"
> ],
> "default": null,
> "doc": "Usually unique MAC address"
> }
> ]
> }
> {code}
> Any help appreciated ! Thanks !
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)